- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 python(通过 Azure 函数)从 Azure Monitor 获取特定警报。Azure Monitor 将为每个事件触发 az 函数。
目前我正在使用get_all从 azure.mgmt.alertsmanagement.operations 模块,这使我能够获取所有警报。也已经测试了 get_by_id,但当我希望自动获取它时,我不得不指定alert_id。
import logging
import urllib3
import os
import json
import requests
from azure.identity import ClientSecretCredential
from azure.mgmt.alertsmanagement import AlertsManagementClient
subscription_id =""
client_id =""
client_secret =""
tenant_id = ""
credential = ClientSecretCredential(
tenant_id=tenant_id,
client_id=client_id,
client_secret=client_secret
)
print("===Auth Azure Monitor===")
client = AlertsManagementClient(
credential,
subscription_id
)
print("=== Get alert event from Az Monitor & Post it to monitoring platform === ")
headers = {'Authorization': f'authtoken {token}'}
for alert in client.alerts.get_all():
if alert.name == "alert_rule_name" :
attributes = {'CLASS': 'EVENT',
'severity': 'CRITICAL',
'msg': alert.name,
'lastModifiedDateTime': json.dumps(alert.properties.essentials.last_modified_date_time, indent=4, sort_keys=True, default=str)
}
payload = [{'eventSourceHostName': alert.properties.essentials.target_resource_name, 'attributes': attributes}]
print("JSON_PAYLOAD :", payload)
## Some code here to push the Alert to a monitoring platform ..
请在下面找到 Azure Monitor 使用 get_all 发送的 json:
{'value': [{'properties': {'essentials': {
'severity': 'Sev2',
'signalType': 'Metric',
'alertState': 'New',
'monitorCondition': 'Fired',
'monitorService': 'Platform',
'targetResource': '/subscriptions/sub_id/resourcegroups/rsg_name/providers/microsoft.compute/virtualmachines/vm_name',
'targetResourceName': 'vm_name',
'targetResourceGroup': 'rsg_name',
'targetResourceType': 'virtualmachines',
'sourceCreatedId': '5f33r_rsg_name_microsoft.insights_metricAlerts_alert_rule_name-1899618006',
'alertRule': '/subscriptions/sub_id/resourceGroups/rsg_name/providers/microsoft.insights/metricAlerts/alert_rule_name',
'startDateTime': '2023-05-09T13:32:28.1880147Z',
'lastModifiedDateTime': '2023-05-09T13:32:28.1880147Z',
'lastModifiedUserName': 'System',
'actionStatus': {'isSuppressed': False}, 'description': ''}
},
'id': '/subscriptions/sub_id/providers/Microsoft.AlertsManagement/alerts/2222-5555-88888',
'type': 'Microsoft.AlertsManagement/alerts',
'name': 'alert_rule_name'},
如您所见,我正在按 [if alert.name == "alert_rule_name"] 进行过滤,但这不是我要查找的内容(我得到了事件列表)。
当 Azure Monitor 调用我的函数时,有没有办法从负载中获取警报 ID?这是利用这个ID来获取特定的alert(事件)。
提前致谢
最佳答案
Is there a way to get the alert ID from the payload when Azure Monitor
您可以使用以下代码通过 python 获取带有有效负载的警报 ID。
您需要在属性中添加 alert.id
才能获取特定警报的警报 ID。
代码:
import os
import json
import requests
from azure.identity import DefaultAzureCredential
from azure.mgmt.alertsmanagement import AlertsManagementClient
subscription_id ="your subscription id"
client_id =""
client_secret =""
tenant_id = ""
credential = ClientSecretCredential(
tenant_id=tenant_id,
client_id=client_id,
client_secret=client_secret
)
print("===Auth Azure Monitor===")
client = AlertsManagementClient(
credential,
subscription_id
)
print("=== Get alert event from Az Monitor & Post it to monitoring platform === ")
for alert in client.alerts.get_all():
if alert.name == "Backup Failure" :
attributes = {'CLASS': 'EVENT',
'severity': 'CRITICAL',
'msg': alert.name,
'id': alert.id,
'lastModifiedDateTime': json.dumps(alert.properties.essentials.last_modified_date_time, indent=4, sort_keys=True, default=str)
}
payload = [{'eventSourceHostName': alert.properties.essentials.target_resource_name,'attributes': attributes}]
print("JSON_PAYLOAD :", payload)
输出:
===Auth Azure Monitor===
=== Get alert event from Az Monitor & Post it to monitoring platform ===
JSON_PAYLOAD : [{'eventSourceHostName': 'mm-automation-runas-account-2', 'attributes': {'CLASS': 'EVENT', 'severity': 'CRITICAL', 'msg': 'aa-test-1', 'id': '/subscriptions/bxxxxf/resourcegroups/management_migration-resources/providers/microsoft.automation/automationaccounts/mm-automation-runas-account-2/providers/Microsoft.AlertsManagement/alerts/3f481155-b808-a188-6exxxxxx', 'lastModifiedDateTime': '"2023-06-14 05:35:14.747028+00:00"'}}]
JSON_PAYLOAD : [{'eventSourceHostName': 'mm-automation-runas-account-2', 'attributes': {'CLASS': 'EVENT', 'severity': 'CRITICAL', 'msg': 'aa-test-1', 'id': '/subscriptions/bxxxxxf/resourcegroups/management_migration-resources/providers/microsoft.automation/automationaccounts/mm-automation-runas-account-2/providers/Microsoft.AlertsManagement/alerts/8cba3e70-c957-4xxxxxxxx', 'lastModifiedDateTime': '"2023-06-13 12:35:13.840749+00:00"'}}]
关于python - 使用 Python 从 Azure Monitor 获取特定警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76437598/
我是 iOS 开发新手。我正在解决的是如何在 iPhone 中运行我的应用程序时获取有关该应用程序的信息。 例如:当我在 Android 中开发时,我连接手机(使用净化模式)并打开 Android M
我仍然不确定这两个调用之间的区别。来自 MSDN, Monitor.Enter(Object) 获取指定对象的独占锁。 Monitor.Wait(Object) 释放对象上的锁并阻塞当前线程,直到它重
我是 GCP 的新手并且来自 Azure 背景。在 GCP 端是否有等效的“Azure Application Insights”用于监控应用程序? 让我用一个例子更清楚地解释我的用例:如果我有一个基
这是说明问题的最小代码: StringBuilder input = new StringBuilder(); void ToUpper() { lock (input) {
我在 ASP.NET 中有一个生产者-消费者场景。我设计了一个Producer 类,一个Consumer 类和一个用于保存共享对象并负责Producer 和Consumer 之间通信的类,我们称它为M
是否可以检测是否是同一个线程试图释放锁?我们在代码中有很多地方看起来像: try { try { if(!Monitor.TryEnter(obj, 2000))
我对并发编程有点陌生,正在尝试了解使用 Monitor.Pulse 和 Monitor.Wait 的好处。 MSDN 的例子如下: class MonitorSample { const in
如果您想在退出和清理对象时阻止执行某些代码块,是否可以使用锁来阻止执行? Monitor.TryEnter(cleanupLock, ref acquiredLock); TryEnter 可用于确保
Monitor.Enter 和 Monitor.Exit 设计为从同一线程调用。但是,如果我需要在与获得的线程不同的线程中释放锁怎么办? 例如:有共享资源和使用该资源的异步操作。该操作以 BeginO
Monitor.PulseAll 通知队列中的所有等待线程。 Monitor.Pulse 通知等待队列中的一个线程。 (下一个等待线程) 只有下一个线程(一个线程)才能获取锁。那有什么区别呢? 什么时
我正在尝试在我的 terraform 代码库中集成对 sshd 进程的 Datadog 监视器检查,但我收到 datadog_monitor.host_is_up2: error updating m
这里的问题是:如果获取对象独占锁的线程(例如通过使用 Monitor.Enter)终止,是否会神奇地释放该对象的独占锁?如果那是真的,那么假设我们从另一个线程调用 Monitor.Exit - 因为我
我正在研究 .NET 中的 Monitor 类,所以我找到了一段似乎可以正常工作的代码,但是当我将它循环一段时间时,它会抛出 OutOfMemoryException。 我在具有 8 GB RAM 的
ECMA-335 规范规定如下: *获取锁(System.Threading.Monitor.Enter 或进入同步方法)应隐式执行 volatile 读取操作,并释放锁(System.Threadi
我在 dll 中使用 OmniThreadLibrary 2.09,主应用程序和 dll 使用相同的 SimpleShareMem 内存管理器。 我用以下代码创建了自己的监视器: FMonitor
我正在使用 R 包 monitoR并收到一条我无法理解的错误消息。 我正在尝试使用 dbUploadTemplate 命令将关联模板列表(“bithTemps”)上传到 MySQL 数据库(“noh”
我想我遗漏了一些关于 Monitor.Enter 和 Monitor.TryEnter 正确行为的信息。这是我编写的一段代码,用于将问题与其余代码分开: object lockObj = new ob
我正在尝试实现一个多线程库,该库将使用线程池同时运行任务。基本上它会从它收到的收集参数中将任务添加到线程池,然后等待直到正在处理的最后一个任务发送脉冲信号。我在早期的测试中取得了成功,但是当我想测试处
我想用redis lua来实现monitor命令,而不是redis-cli monitor。但我不知道怎么办。 redis.call('monitor') 不起作用。 最佳答案 您不能从 Redis
根据语言规范,lock(obj) statement; 会被编译为: object lockObj = obj; // (the langspec doesn't mention this var,
我是一名优秀的程序员,十分优秀!