如何配置与Check_MK本地检查一致的Datadog本地检查
Datadog 本地检查适配 Check_MK 输出格式方案
Datadog 可以通过自定义服务检查实现和 Check_MK 本地检查一致的逻辑,下面是具体实现方法和集成步骤:
一、核心思路
Check_MK 靠脚本输出的第一个字段标识状态(ok/warn/critical),第二个字段定义服务名;Datadog 可以通过解析脚本输出,将这些字段映射到自身的服务检查体系(状态码+自定义检查名称),实现等价效果。
二、分步实现
1. 保留 Check_MK 格式的 Shell 脚本
继续沿用你熟悉的输出格式编写脚本,比如磁盘使用率检查示例:
#!/bin/bash DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//') if [ "$DISK_USAGE" -lt 80 ]; then echo "ok Disk Usage / is $DISK_USAGE%" elif [ "$DISK_USAGE" -lt 90 ]; then echo "warn Disk Usage / is $DISK_USAGE%" else echo "critical Disk Usage / is $DISK_USAGE%" fi
给脚本加执行权限:chmod +x /opt/scripts/disk_check.sh
2. 用 Datadog Agent Exec Checks 执行脚本
在 Datadog Agent 配置目录下创建自定义检查的配置:
- 新建目录:
mkdir -p /etc/datadog-agent/conf.d/custom_disk_check.d - 创建
conf.yaml文件,内容如下:
init_config: instances: - name: custom_disk_check command: "/opt/scripts/disk_check.sh" interval: 60 # 检查间隔,单位秒
3. 解析输出并映射到 Datadog 状态
由于 Datadog 不会自动识别 Check_MK 的状态字段,需要编写一个简单的解析逻辑,将脚本输出转换为 Datadog 服务检查。推荐用 Python 脚本包装(利用 Datadog 的 statsd 客户端):
import subprocess from datadog import initialize, statsd # 初始化Datadog statsd客户端 initialize(statsd_host='localhost', statsd_port=8125) # 执行Shell脚本并捕获输出 proc = subprocess.run(['/opt/scripts/disk_check.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) output_line = proc.stdout.strip() # 拆分输出字段 parts = output_line.split(maxsplit=2) if len(parts) < 2: # 输出格式异常时标记为UNKNOWN statsd.service_check(check_name="custom.disk_usage", status=3, message="Invalid script output") exit(1) # 映射Check_MK状态到Datadog状态码 status_map = {"ok":0, "warn":1, "critical":2} status = status_map.get(parts[0], 3) service_name = parts[1].lower().replace(" ", "_") message = parts[2] if len(parts) ==3 else "" # 发送服务检查到Datadog statsd.service_check( check_name=f"custom.{service_name}", status=status, message=message )
将这个 Python 脚本保存为 /opt/scripts/disk_check_wrapper.py,然后修改 Agent 的 conf.yaml,把执行命令换成这个 Python 脚本:
command: "/usr/bin/python3 /opt/scripts/disk_check_wrapper.py"
4. 验证部署
- 重启 Datadog Agent:
systemctl restart datadog-agent - 检查 Agent 状态:
datadog-agent status,在「Running Checks」下找到custom_disk_check - 登录 Datadog 控制台,进入「Monitors > Service Checks」,就能看到自定义的服务检查状态了
三、进阶优化
- 如果有多个 Check_MK 格式的脚本,可以写一个通用的解析 wrapper,避免重复代码
- 对于不需要复杂解析的场景,也可以直接在 Shell 脚本中调用
dog命令(Datadog CLI)发送服务检查 - 可以基于这些服务检查配置告警规则,和 Datadog 原生监控统一管理
内容的提问来源于stack exchange,提问作者chamara
相关产品推荐
相关产品推荐

