插件地址:https://github.com/ncabatoff/process-exporter
1、安裝部署
cd /usr/local
wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.2/process-exporter-0.7.2.linux-amd64.tar.gz
tar -zxvf process-exporter-0.7.2.linux-amd64.tar.gz
mv process-exporter-0.7.2.linux-amd process-exporter
2、創建啟動腳本
vi /usr/lib/systemd/system/process-exporter.service [Unit] Description=redis_exporter Documentation=https://github.com/ncabatoff/process-exporter After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/process-exporter/process-exporter -config.path /usr/local/process-exporter/process-exporter.yml Restart=on-failure [Install] WantedBy=multi-user.target
啟動服務
systemctl daemon-reload
systemctl start redis_exporter
systemctl status redis_exporter
systemctl enable redis_exporter
ss -tulnp | grep 9256
編寫配置文件
process_names:
- matcher1
- matcher2
例如:監控所有的服務進程
process_names: - name: "{{.Comm}}" cmdline: - '.+'
監控進程名為test程序
process_names: - name: "{{.Matches}}" cmdline: - 'test'
配置模板選項如下:
{{.Comm}} 包含原始可執行文件的basename,/proc//stat 中的換句話說,2nd 字段
{{.ExeBase}} 包含可執行文件的basename
{{.ExeFull}} 包含可執行文件的完全限定路徑
{{.Username}} 包含有效用戶的用戶名
{{.Matches}} 映射包含應用命令行tlb所產生的所有匹配項
process_names中的每個項目都必須包含一個或多個選擇器(comm,exe或cmdline), 如果存在多個選擇器,則它們必須全部匹配。 每個選擇器都是一個字符串列表,用於與進程的comm,argv [0]匹配;對於cmdline,則是一個適用於命令行的正則表達式。 cmdline regexp使用Go語法。
對於comm和exe,字符串列表是一個OR,這意味着與任何字符串匹配的任何進程都將添加到該項目的組中。
對於cmdline,正則表達式列表為AND,表示它們都必須匹配。 正則表達式中的任何捕獲組都必須使用?P <name>選項為捕獲分配一個名稱,該名稱用於填充.Matches。
驗證
curl localhost:9256/metrics
例如:> ps -ef | grep redis
redis 771 1 0 Jun05 ? 00:45:49 /usr/bin/redis-server *:6379
{{.Comm}} | groupname="redis-server" | exe或者sh文件名稱 |
{{.ExeBase}} | groupname="redis-server *:6379" | / |
{{.ExeFull}} | groupname="redis-server *:6379" | ps中進程完成信息 |
{{.Username}} | groupname="redis" | 使用進程所屬的用戶進行分組 |
{{.Matches}} | groupname="map[:redis]" | 表示匹配到關鍵字"redis" |
Grafana圖表顯示:
process-exporter對應的dashboard為:https://grafana.com/grafana/dashboards/249
計算
namedprocess_namegroup_num_threads