单进程 CPU 监控

收集指定进程的 CPU 占用情况

插件文件地址
proc.cpu
插件类型
接受参数,持续执行(Step 周期须指定为 0

插件参数

参数 功能
cmdline 被监控进程的命令行正则表达式 [1]
interval 收集和上报的周期 [2]
name 这个监控的名字,用来区分其他的单进程 CPU 监控
[1]命令行是从 /proc/ pid /cmdline 读取并且将其中的 \x00 替换成空格后进行匹配。 匹配是任意位置的,需要限定从一开始匹配的话请在正则前面加上 ^
[2]CPU 的占用是通过读取进程的 CPU 时间并除以监控间隔得出的,这里的 interval 太大的话会把 实际的 CPU 占用尖刺抹平。

上报的监控值

proc.cpu
意义:指定进程的 CPU 占用
取值:百分比,取值 0 - 100。超过 100 代表占用了 1 个以上的核。
Tags:{"port": " 指定的端口 ", "name": " 指定的监控名字 "}

监控规则样例

(def infra-redis-cpu-rules
  (sdo
    (where (host #"^redis-.+$")
      (plugin "proc.cpu" 0 {:name "redis", :cmdline "^/usr/bin/redis-server", :interval 5})

      (where (and (service "proc.cpu")
                  (= (:name event) "redis"))
        (by [:host :name]
          (judge (> 90)
            (runs 12 :state
              (alarm-every 2 :min
                (! {:note "Redis 进程 CPU 占用过高"
                    :level 1
                    :expected 3
                    :groups [:operation :api]})))))))))