每次写入错误时,我能否触发 LogAnalytics 发送包含错误本身的电子邮件?
Can I trigger LogAnalytics to send an email containing the error itself each time an error is written?
在我们公司,我们正在讨论如何以通用的方式处理日志记录。我们为多个客户提供多个 Azure 订阅。
我的愿景:
将所有内容记录到 Log Analytics 并在发生坏事时发送通知。我的想法可以很容易地(伪)描述为:
if (level = "Error")
{ SendMailToActionGroup(ErrorBody); }
那么,这可行吗?
我能否触发 LogAnalytics 在每次写入错误时发送包含错误本身的电子邮件?
至此,我已经想出了如何通过执行日志搜索来查找 Log Analytics 中的错误,例如这个:
AzureDiagnostics
| where Level == "Error"
| where TimeGenerated > ago(5m)
我每五分钟 运行 它肯定会找到一些东西。然后它调用决定的行动组并发送一封电子邮件,说明警报已被触发。阈值是 1 命中。
但这还不够。这些从 Azure 发送的电子邮件直接发送到我们的客户服务门户。这是我们需要错误的地方,而不是警报已被触发的信息。有时会出现多个错误,而电子邮件并未对所有错误进行解释。它显示前 1 个搜索结果和一些基本内容。
因此,解决这个问题的更好方法是在将所有错误写入 Log Analytics 时捕获它们。然后我们可以分别抓到他们,并根据一封已经包含所有必要信息的电子邮件对他们中的每一个发起案例。
请随时改进问题,因为我还没有找到关于此事的任何其他信息。
说得好! AFAIK 警报邮件格式是按照设计的。如果您在创建警报时正在寻找动态邮件格式,请随时在 https://feedback.azure.com/forums/267889-log-analytics.
中提供反馈
我会更改 AzureDiagnostics 日志的愿景(伪),如下所示。
if (Level = "Error") {
ConfigureMailBodyWithLogicAppOrFunctionAppOrRunbook (Level,ResultDescription,ResultType,Status,TimeGenerated,ErrorCode,ErrorMessage, etc.);
ConfigureAlertWithActionGroupEitherLogicAppOrFunctionAppOrRunbookActionType();
}
因此,您可以使用操作类型逻辑应用程序或功能应用程序或运行手册,而不是将“电子邮件”作为操作类型,并尝试在其中设置动态邮件正文的格式。如需帮助,请查看 https://docs.microsoft.com/en-us/azure/azure-monitor/platform/action-groups-logic-app
或者以另一种更简单的方式,您可以尝试以更精细的方式进行查询以获取模式化错误,然后相应地为其创建警报。例如,要在任何 SQL 服务停止时收到警报电子邮件,请使用以下查询。
Event
| where (EventLog == "System")
| where (RenderedDescription has "sql" and RenderedDescription has "stopped")
例如与您的服务区域的 AzureDiagnostics 日志相关的,您可以检查任何 AzureDiagnostics 属性 是否有错误的详细描述,然后使用这些属性进行查询。 AzureDiagnostics 日志的所有可能属性的列表在此处名为“资源诊断日志的服务特定模式”的部分中列出 -> https://docs.microsoft.com/en-us/azure/azure-monitor/platform/tutorial-dashboards。希望对您有所帮助!!
在我们公司,我们正在讨论如何以通用的方式处理日志记录。我们为多个客户提供多个 Azure 订阅。
我的愿景: 将所有内容记录到 Log Analytics 并在发生坏事时发送通知。我的想法可以很容易地(伪)描述为:
if (level = "Error")
{ SendMailToActionGroup(ErrorBody); }
那么,这可行吗?
我能否触发 LogAnalytics 在每次写入错误时发送包含错误本身的电子邮件?
至此,我已经想出了如何通过执行日志搜索来查找 Log Analytics 中的错误,例如这个:
AzureDiagnostics
| where Level == "Error"
| where TimeGenerated > ago(5m)
我每五分钟 运行 它肯定会找到一些东西。然后它调用决定的行动组并发送一封电子邮件,说明警报已被触发。阈值是 1 命中。
但这还不够。这些从 Azure 发送的电子邮件直接发送到我们的客户服务门户。这是我们需要错误的地方,而不是警报已被触发的信息。有时会出现多个错误,而电子邮件并未对所有错误进行解释。它显示前 1 个搜索结果和一些基本内容。
因此,解决这个问题的更好方法是在将所有错误写入 Log Analytics 时捕获它们。然后我们可以分别抓到他们,并根据一封已经包含所有必要信息的电子邮件对他们中的每一个发起案例。
请随时改进问题,因为我还没有找到关于此事的任何其他信息。
说得好! AFAIK 警报邮件格式是按照设计的。如果您在创建警报时正在寻找动态邮件格式,请随时在 https://feedback.azure.com/forums/267889-log-analytics.
中提供反馈我会更改 AzureDiagnostics 日志的愿景(伪),如下所示。
if (Level = "Error") {
ConfigureMailBodyWithLogicAppOrFunctionAppOrRunbook (Level,ResultDescription,ResultType,Status,TimeGenerated,ErrorCode,ErrorMessage, etc.);
ConfigureAlertWithActionGroupEitherLogicAppOrFunctionAppOrRunbookActionType();
}
因此,您可以使用操作类型逻辑应用程序或功能应用程序或运行手册,而不是将“电子邮件”作为操作类型,并尝试在其中设置动态邮件正文的格式。如需帮助,请查看 https://docs.microsoft.com/en-us/azure/azure-monitor/platform/action-groups-logic-app
或者以另一种更简单的方式,您可以尝试以更精细的方式进行查询以获取模式化错误,然后相应地为其创建警报。例如,要在任何 SQL 服务停止时收到警报电子邮件,请使用以下查询。
Event
| where (EventLog == "System")
| where (RenderedDescription has "sql" and RenderedDescription has "stopped")
例如与您的服务区域的 AzureDiagnostics 日志相关的,您可以检查任何 AzureDiagnostics 属性 是否有错误的详细描述,然后使用这些属性进行查询。 AzureDiagnostics 日志的所有可能属性的列表在此处名为“资源诊断日志的服务特定模式”的部分中列出 -> https://docs.microsoft.com/en-us/azure/azure-monitor/platform/tutorial-dashboards。希望对您有所帮助!!