本文档介绍如何在ECS服务器上通过脚本,将异常记录主动推送至运维事件中心。
在服务器上主动推送异常事件是非常常见的场景,本文将以一段包含关键指标/异常信息的日志,通过shell/python脚本进行数据推送为例,在运维事件中心里以标准集成的方式完成事件生成及流转。
获取异常信息
本文档以推送某段日志为例,实际运行中,用户可通过shell/python自定义异常场景,仅需把异常场景的关键信息推送过来即可。
示例日志内容如下,并将日志保存为test.log。
{"summary":"Cpu_util at 85.16% on machine X.X.X.X","application":"xxx/yyy","name":"Cpu 使用超额预警","details":{"freeSpace":"1%","pingTime":"1500ms","loadAvg":"0.75"},"source":"X.X.X.X","priority":"P4","region":"shanghai","class":"Load","timestamp":"2021-07-17 T08:42:58.315+0000","group":"线上","tags":"{}"}
为了便于说明,上述日志内容的字段已按照标准集成数据格式进行打印。
添加集成并进行异常推送
添加集成
1. 在运维事件中心控制台获取标准集成的密钥。
2. 将复制的链接替换成下述脚本里的URL
shell脚本:
#!/bin/bash
json=$(tail -n1 test.log)
curl -i -X POST \
'
URL
' \
-H 'Content-type':'application/json' \
-d "$json"
请将上述脚本中的URL替换为控制台获取的推送URL地址。
python脚本:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import io
filename = 'test.log'
with io.open(filename,encoding='utf-8')as f:
lines = f.readlines()
last_line = lines[-1]
kv = json.loads(last_line)
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "
URL
"
s = json.dumps(kv)
print(requests.post(api_url,data=s,headers=headers).content)
请将上述脚本中的URL替换为控制台获取的推送URL地址。
3. 执行脚本或将脚本加入crontab中进行定期执行。脚本执行时将会把test.log的日志推送到运维事件中心。
配置事件流转规则
脚本执行后,在运维事件中心控制台的集成配置>标准集成里,可以看到此集成已是“已接收告警”状态,并且可查看最近一次告警记录。
按如下步骤进行流转规则的配置。
1. 进入流转规则>新增规则,填写规则名称,选择监控源为“标准集成”,选择对应的key、过滤规则、对应的value值,并关联具体的服务。
2. 按照实际需求,选择触发为事件或报警。本示例选择为事件。关于流转规则的更详细介绍,请查看如何配置流转规则。
3. 按照实际需求,为事件配置对应的服务组及通知订阅。本示例将关联1个服务组并关联对应的通知订阅
4. 再次执行脚本进行数据推送。
流转规则仅对增量推送的告警生效,所以此处需再次执行脚本进行数据推送。
5. 在运维事件中心控制台的事件中心>事件,即可看到最新推送告警所生成的事件了。同时分派对象会接收到对应的短信、邮件通知。
其他
以上为在ECS服务上,如何以脚本的形式将服务器探测到的异常事件进行推送,其中脚本语言可以替换为其他语言(如集成在程序代码里)、原始记录不一定是日志(可以替换为其他方式所采集到的异常)、异常内容可以充分自定义(满足标准格式为前提)。