如何通过Linux服务器Shell脚本在Dynatrace中创建问题指标并触发问题?
如何通过Linux Shell脚本在Dynatrace中创建问题指标
完全可以实现你的需求,以下是对应两个条件的具体实现方案:
1. 让Dynatrace能够调用Shell脚本
有两种常用方式实现脚本调用:
方式一:基于OneAgent自定义扩展(定时自动调用)
通过Dynatrace OneAgent的自定义扩展机制,配置定时执行你的服务状态检查脚本:
- 在Linux服务器的OneAgent扩展目录(通常是
/opt/dynatrace/oneagent/agent/conf/extensions)下创建自定义扩展文件夹,比如custom.service.status.monitor - 在该文件夹内创建
extension.yaml配置文件,示例内容:name: custom.service.status.monitor version: 1.0.0 description: 定时检查服务运行状态 metrics: - key: service.health.status type: gauge displayName: 服务健康状态 description: 1=运行正常,0=停止/异常 entities: - type: HOST metrics: - service.health.status monitors: - type: remote script: /usr/local/bin/check_service_status.sh interval: 30s - 你的Shell脚本
check_service_status.sh需要输出符合Dynatrace指标格式的内容,示例:#!/bin/bash if systemctl is-active --quiet my-target-service; then echo "service.health.status 1" else echo "service.health.status 0" fi - 给脚本添加执行权限:
chmod +x /usr/local/bin/check_service_status.sh - 重启OneAgent生效:
systemctl restart dynatrace-oneagent.service
方式二:通过Dynatrace API触发按需调用
如果需要按需触发脚本而非定时执行,可以通过Dynatrace API结合服务器本地调度实现:
- 在Dynatrace控制台生成具备
entities.read权限的API令牌 - 在Linux服务器上配置脚本,可通过外部请求或内部调度(如cron)触发,执行状态检查逻辑
2. 根据脚本响应在Dynatrace中创建问题
同样有两种对应方案:
方案一:基于自定义指标配置警报规则
当脚本上报的指标触发阈值时,自动生成问题:
- 在Dynatrace控制台进入警报ing > 警报规则,点击「创建警报规则」
- 选择「自定义指标」,找到你定义的
service.health.status - 设置触发条件:比如「指标值等于0,持续时间超过1分钟」
- 配置问题的标题、描述,以及通知渠道(邮件、Slack等)
- 保存规则后,当脚本检测到服务异常时,Dynatrace会自动创建对应的问题
方案二:脚本直接调用API上报事件创建问题
如果需要更灵活的问题触发逻辑,可在脚本中直接调用Dynatrace Events API上报异常事件,自动生成问题:
- 在脚本中添加异常上报逻辑,示例片段:
#!/bin/bash SERVICE_NAME="my-target-service" DYNATRACE_URL="https://your-dynatrace-env.live.dynatrace.com/api/v2/events/ingest" API_TOKEN="your-api-token-with-events-ingest-permission" HOST_ENTITY_ID="HOST-XXXXXX" # 可通过Dynatrace API或控制台获取主机ID if ! systemctl is-active --quiet $SERVICE_NAME; then curl -X POST $DYNATRACE_URL \ -H "Authorization: Api-Token $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "eventType": "CUSTOM_ALERT", "title": "'$SERVICE_NAME'服务异常", "description": "检测到'$SERVICE_NAME'已停止运行", "entitySelector": "type(HOST),entityId('$HOST_ENTITY_ID')" }' fi - 上报的自定义警报事件会在Dynatrace中自动转化为问题,并关联到指定的主机实体
内容的提问来源于stack exchange,提问作者Milinda
相关产品推荐
相关产品推荐

