首页 > 系统相关 >prometheus学习笔记之进程监控process_exporter

prometheus学习笔记之进程监控process_exporter

时间:2024-10-10 14:02:05浏览次数:1  
标签:namedprocess exporter namegroup process prometheus 进程 total

项目地址:https://github.com/ncabatoff/process-exporter

一、安装process-exporter

https://github.com/ncabatoff/process-exporter/releases/download/v0.8.3/process-exporter-0.8.3.linux-amd64.tar.gz
tar xf process-exporter-0.8.3.linux-amd64.tar.gz 
mv  process-exporter-0.8.3.linux-amd64 /usr/local/process-exporter
cd /usr/local/process-exporter
vim process-exporter.yaml #监控所有进程,具体配置参考官方文档
process_names:
  - name: "{{.Matches}}"  #匹配一个或多个
    cmdline:
    - 'redis-server'

  - name: "{{.Comm}}" #匹配所有
    cmdline:
    - '.+'

vim /usr/lib/systemd/system/process_exporter.service 
[Unit]
Description=Prometheus exporter for processors metrics, written in Go with pluggable metric collectors.
Documentation=https://github.com/ncabatoff/process-exporter
After=network.target
 
[Service]
Type=simple
WorkingDirectory=/usr/local/process-exporter/
ExecStart=/usr/local/process-exporter/process-exporter -config.path=/usr/local/process-exporter/process-exporter.yaml
Restart=on-failure
 
[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl start process_exporter
systemctl enable process_exporter
netstat -tnlp|grep 9256

浏览器查看数据抓取

二、process-exporter配置简解

1.配置格式及优先级

YAML 文件的一般格式是顶级 process_names 部分,其中包含名称匹配器列表,如果一个进程被多个匹配项匹配,则谁在前谁匹配到:
process_names:
  - matcher1  
  - matcher2
  ...
  - matcherN

2.模板及模板变量

process_names 中的每个项目都提供了用于标识和命名进程的方法。可选的 name 标签定义用于命名匹配进程的模板;如果未指定,则 name 默认为 {{.ExeBase}}
模板的可用变量:
{{.Comm}} 包含原始可执行文件的基本名称,即 /proc/<pid>/stat 中的第 2 个字段,并截取前15个字符
{{.ExeBase}} 包含可执行文件的基本名称  
{{.ExeFull}} 包含可执行文件的完全限定路径  
{{.Username}} 包含有效用户的用户名  
{{.Matches}} map 包含应用 cmdline 正则表达式产生的所有匹配项
{{.PID}} 包含进程的 PID。请注意,使用 PID 意味着该组将仅包含一个进程
{{.StartTime}} 包含进程的开始时间。这与 PID 结合使用时非常有用,因为 PID 会随着时间的推移而被重用。
{{.Cgroups}} 包含(如果支持)进程的 cgroups (/proc/self/cgroup)。这对于识别进程属于哪个容器特别有用
#不建议使用 PID 或 StartTime:结果不一定符合预期

补充说明:name选项其实影响的是metrics中的key:groupname,以监控redis作为例子 前提:redis的进程信息如下: [root@izx7dvghztbiorz process-exporter]# 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="/usr/bin/redis-server *:6379" ps中的进程完成信息
{{.Username}} groupname="redis" 使用进程所属的用户进行分组
{{.Matches}} groupname="map[:redis]"

表示配置到关键字“redis”



3.进程选择器

process_names中的每个项目都必须包含一个或多个选择器(comm、exe 或 cmdline);如果存在多个 selector,则它们必须全部匹配。每个选择器都是一个字符串列表,
用于匹配进程的 comm argv[0],或者在 cmdline 的情况下,用于应用于命令行的正则表达式。cmdline regexp 使用 Go 语法(https://pkg.go.dev/regexp) 对于 comm 和 exe,字符串列表是 OR,这意味着与任何字符串匹配的任何进程都将添加到项目的组中。 对于 cmdline,正则表达式列表是 AND,这意味着它们都必须匹配。regexp 中的任何捕获组都必须使用 ?P<name> 选项为捕获分配名称,该名称用于填充 .Matches 性能提示:除了任何 cmdline 子句外,还要提供 exe 或 comm 子句,这样就可以避免在可执行文件名称不匹配时执行 regexp。

为避免与 cmdline YAML 元素混淆,我们将进程 /proc/<pid>/cmdline 的命令行参数称为数组 argv[]

如以下示例

process_names:
 #comm是/proc/<pid>/stat减去parens的第二个字段,截断前15个字符
  - comm:
    - bash

  # exe是argv[0]。如果没有斜线,则只需要匹配argv[0]的基名,如果exe包含斜线,则argv[0]必须完全匹配
  - exe:
    - postgres
    - /usr/local/bin/prometheus

  # cmdline是应用于argv的正则表达式列表 每个捕获都必须匹配,任何捕获都将添加到 .Matches
  - name: "{{.ExeFull}}:{{.Matches.Cfgfile}}"
    exe:
    - /usr/local/bin/process-exporter
    cmdline:
    - -config.path\s+(?P<Cfgfile>\S+)

4.组指标

process-exporter 假设每个指标都将附加到一组进程 - 不是技术意义上的进程组,只是一个或多个满足配置规范的进程应该监控什么以及如何命名它
指标都以 namedprocess_namegroup_ 开头,并且至少具有标签 groupname
namedprocess_namegroup_num_procs  组中的进程数。
namedprocess_namegroup_cpu_seconds_total CPU 使用, /proc/[pid]/stat 字段 utime(14)和 stime(15),即用户和系统时间。这类似于 node_exporter 的node_cpu_seconds_total
namedprocess_namegroup_read_bytes_total  基于 /proc/[pid]/io 字段read_bytes读取的字节数,需要root用户运行process-exporter才有权限读取io数据
namedprocess_namegroup_write_bytes_total 根据 /proc/[pid]/io 字段write_bytes写入的字节数
namedprocess_namegroup_major_page_faults_total 基于 /proc/[pid]/stat 字段 majflt(12) 的主要页面错误数。
namedprocess_namegroup_minor_page_faults_total  基于 /proc/[pid]/stat 字段 minflt(10) 的次要页面错误数。
namedprocess_namegroup_context_switches_total基于 /proc/[pid]/status 字段 voluntary_ctxt_switches 和 nonvoluntary_ctxt_switches 的上下文切换数。额外标签 ctxswitchtype 可以有两个值:voluntary 和 nonvoluntary。
namedprocess_namegroup_memory_bytes  已使用的内存字节数。额外的标签 memtype 可以有三个值:1.resident:/proc/[pid]/stat 字段 rss(24)  2:virtual  vsize(23)虚拟内存大小 3:swapped  VmSwap字段
namedprocess_namegroup_open_filedesc 文件描述符的数量,基于目录 /proc/[pid]/fd 中的条目数
namedprocess_namegroup_worst_fd_ratio
namedprocess_namegroup_在组中的所有进程中,打开的 filedesc 与 filedesc 限制的比率最差。该限制是基于 /proc/[pid]/limits 的 fd 软限制
namedprocess_namegroup_oldest_start_time_seconds 组中最早的进程开始的纪元时间(自 1970/1/1 以来的秒数)。这是从 /proc/[pid]/stat 的字段 starttime(22) 派生的,添加到引导时间中以使其相对于纪元。
namedprocess_namegroup_num_threads  组中所有进程的线程数之和。基于 /proc/[pid]/stat 中的 num_threads(20) 字段
namedprocess_namegroup_states 组中处于各种状态的线程数,基于 /proc/[pid]/stat 中的字段 state(3)

5.组线程指标

namedprocess_namegroup_thread_cpu_seconds_total 与 cpu_user_seconds_total 和 cpu_system_seconds_total 相同,但按线程细分子组
namedprocess_namegroup_thread_io_bytes_total 与 read_bytes_total 和 write_bytes_total 相同,但按线程细分子组
namedprocess_namegroup_thread_major_page_faults_total 与 major_page_faults_total 相同,但按线程子组划分
namedprocess_namegroup_thread_minor_page_faults_total 与 minor_page_faults_total 相同,但按线程子组划分
namedprocess_namegroup_thread_context_switches_total 与 context_switches_total 相同,但按线程细分子组

三、配置prometheus抓取

vim prometheus.yml 
  - job_name: 'yty-process'              #进程监控
    static_configs:
    - targets: ['192.168.100.131:9256']

curl -X POST http://127.0.0.1:9090/-/reload 

四、grafana模板

 https://grafana.net/dashboards/249

五、常用告警规则

1.进程数
alert: 进程告警
expr: sum(namedprocess_namegroup_states) by (cluster,job,instance) > 500
for: 20s
labels:
  severity: warning
annotations:
  value: 服务器当前已产生 {{ $value }} 个进程,大于告警阈值
2.僵尸进程数 alert: 进程告警 expr: sum by(cluster, job, instance, groupname) (namedprocess_namegroup_states{state="Zombie"}) > 0 for: 1m labels: severity: warning annotations: value: 当前产生 {{ $value }} 个僵尸进程
3.进程重启 alert: 进程重启告警 expr: ceil(time() - max by(cluster, job, instance, groupname) (namedprocess_namegroup_oldest_start_time_seconds)) < 60 for: 25s labels: label: alert_once severity: warning annotations: value: 进程 {{ $labels.groupname }} 在 {{ $value }} 秒前发生重启
4.进程退出 alert: 进程退出告警 expr: up{export="process_exporter"} == 0 or max by(cluster, job, instance, groupname) (delta(namedprocess_namegroup_oldest_start_time_seconds{groupname=~"^map.*"}[10d])) < 0 for: 55s labels: severity: warning annotations: value: 进程 {{ $labels.export}} 已退出

 

标签:namedprocess,exporter,namegroup,process,prometheus,进程,total
From: https://www.cnblogs.com/panwenbin-logs/p/18456137

相关文章

  • prometheus学习笔记之黑盒探针blackbox_exporter
    项目地址:https://github.com/prometheus/blackbox_exporter一、安装blackbox_exporterwgethttps://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gztarxfblackbox_exporter-0.25.0.linux-amd64.tar.gz-......
  • C++编译并运行后出现Process finished with exit code 139 (interrupted by signal 11
    问题描述:        代码运行意外终止,报错信息为Processfinishedwithexitcode139(interruptedbysignal11:SIGSEGV)CMakeList文件如下:cmake_minimum_required(VERSION3.26)project(SLAM)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIRED......
  • Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控
    Docker环境下GPU监控实战:使用Prometheus实现DCGMExporter部署与GPU性能监控文章目录Docker环境下GPU监控实战:使用Prometheus实现DCGMExporter部署与GPU性能监控一查看当前GPU信息二dcgm-exporter部署1)Dockerrun运行2)Dockercompose运行三......
  • 对UVM添加超时前的打印信息+AXI低功耗接口+process的await语句+对象当成参数+sv的单例
    对UVM添加超时前的打印信息首先获取到UVM的超时值,然后手动设定\$time的比较和while延时循环,当超出时间后,打印特殊的debug信息。$time<set_time,则进行循环。uvm_cmdline_processorclp;clp=uvm_cmdline_processor::get_inst();stringtimeout_settings[$];stringtimeout......
  • Prometheus + Grafana 监控 MySQL 数据库
    文章目录1、前置介绍2、搭建流程2.1、安装Docker2.2、安装MySQL2.3、安装MySQLExporter2.4、安装Prometheus2.5、安装Grafana1、前置介绍本次监控平台搭建,我使用2台阿里云服务器来完成本次的搭建部署操作,配置如下:阿里云ECS1:2核2G,Ubuntu22.02,内网ip:172.16.0......
  • Centos7安装部署prometheus
    普罗米修斯的主要特点是:具有由度量名称和键/值对标识的时间序列数据的多维数据模型PromQL,一种灵活的查询语言, 可以利用这一维度不依赖分布式存储;单个服务器节点是自治的时间序列集合通过HTTP上的拉模型发生推送时间序列通过中间网关支持通过服务发现或静态配置发现目标......
  • 基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云平台系统(附配置告警至QQ、钉钉)
    目录一、机器规划二、部署安装node-exporter、prometheus、Grafana、kube-state-metrics1、创建monitor-sa命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据3、k8s集群中部署prometheus3.1、创建一个sa账号3.2、将sa账号moni......
  • prometheus学习笔记之PromQL
    prometheus学习笔记之PromQL一、PromQL语句简介官方文档:https://prometheus.io/docs/prometheus/latest/querying/basics/Prometheus提供⼀个函数式的表达式语⾔PromQL(PrometheusQueryLanguage),可以使⽤户实时地查找和聚合时间序列数据,表达式计算结果可以在图表中展示,也可......
  • Python 并发新境界:探索 `multiprocessing` 模块的无限可能
    引言随着硬件技术的发展,多核处理器已经成为标准配置。这意味着我们的计算机拥有执行多个任务的能力。然而,默认情况下,Python程序由于全局解释器锁(GIL)的存在,并不能充分利用这些核心资源。这就引出了multiprocessing模块的重要性——它通过创建独立进程来绕过GIL限制,从而实现真正的并......
  • Hard Process
    HardProcess(题面)大意:给定一个长度为\(n(0<=n<=10^5)\)的序列,序列中只包含0或1,现有k次机会可以将0改为1,问,k次机会前最长连续1序列的长度并且输出这个序列(只需一个)。解法:二分答案+前缀和证二分答案的单调性:先解释check函数:现有一个需要查询的长度len,从1开始直到n,遍历每一个长......