Prometheus监控进程

news/2024/5/19 4:04:23/文章来源:https://blog.csdn.net/heian_99/article/details/126972415

Prometheus监控进程

process-export主要用来做进程监控,比如某个服务的进程数、消耗了多少CPU、内存等资源。

一、process-exporter使用

1.1 下载 process-exporter

process-exporter GibHUB地址
process-exporter 下载地址

process-exporter可以使用命令行参数也可以指定配置文件启动

1.2 配置 process-exporter

vim /usr/local/process-exporter/process_name.yaml #存放脚本的地方process_names:
#  - name: "{{.Comm}}"
#    cmdline:
#    - '.+'- name: "{{.Matches}}"cmdline:- 'nginx' #唯一标识- name: "{{.Matches}}"cmdline:- '/opt/atlassian/confluence/bin/tomcat-juli.jar'- name: "{{.Matches}}"cmdline:- 'vsftpd'- name: "{{.Matches}}"cmdline:- 'redis-server'

示例:

cmdline: 所选进程的唯一标识,ps -ef 可以查询到。如果改进程不存在,则不会有该进程的数据采集到。

例如:> ps -ef | grep redis

redis 4287 4127 0 Oct31 ? 00:58:12 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”

1.3 编写启动脚本

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
User=root
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

1.4 启动 procexx-export

systemctl daemon-reload
systemctl start process_exporter
systemctl enable process_exporter

验证监控数据

curl http://localhost:9256/metrics#相关测试的数据
# HELP http_response_size_bytes The HTTP response sizes in bytes.
# TYPE http_response_size_bytes summary
http_response_size_bytes{handler="prometheus",quantile="0.5"} 2988
http_response_size_bytes{handler="prometheus",quantile="0.9"} 2996
http_response_size_bytes{handler="prometheus",quantile="0.99"} 3006
http_response_size_bytes_sum{handler="prometheus"} 1.34205181e+08
http_response_size_bytes_count{handler="prometheus"} 45188
# HELP namedprocess_namegroup_context_switches_total Context switches
# TYPE namedprocess_namegroup_context_switches_total counter
namedprocess_namegroup_context_switches_total{ctxswitchtype="nonvoluntary",groupname="map[:bladebit]"} 7.7977455e+07
namedprocess_namegroup_context_switches_total{ctxswitchtype="nonvoluntary",groupname="map[:pw_python.py]"} 2.02666e+06
namedprocess_namegroup_context_switches_total{ctxswitchtype="voluntary",groupname="map[:bladebit]"} 3.335109e+06
namedprocess_namegroup_context_switches_total{ctxswitchtype="voluntary",groupname="map[:pw_python.py]"} 8.22652233e+08
# HELP namedprocess_namegroup_cpu_system_seconds_total Cpu system usage in seconds
# TYPE namedprocess_namegroup_cpu_system_seconds_total counter
namedprocess_namegroup_cpu_system_seconds_total{groupname="map[:bladebit]"} 94275.01000000017
namedprocess_namegroup_cpu_system_seconds_total{groupname="map[:pw_python.py]"} 64818.93000000004
# HELP namedprocess_namegroup_cpu_user_seconds_total Cpu user usage in seconds
# TYPE namedprocess_namegroup_cpu_user_seconds_total counter
namedprocess_namegroup_cpu_user_seconds_total{groupname="map[:bladebit]"} 2.42621264299998e+07
namedprocess_namegroup_cpu_user_seconds_total{groupname="map[:pw_python.py]"} 85.29000000000613
# HELP namedprocess_namegroup_major_page_faults_total Major page faults
# TYPE namedprocess_namegroup_major_page_faults_total counter
namedprocess_namegroup_major_page_faults_total{groupname="map[:bladebit]"} 18261
namedprocess_namegroup_major_page_faults_total{groupname="map[:pw_python.py]"} 1236
# HELP namedprocess_namegroup_memory_bytes number of bytes of memory in use
# TYPE namedprocess_namegroup_memory_bytes gauge
namedprocess_namegroup_memory_bytes{groupname="map[:bladebit]",memtype="resident"} 4.46810939392e+11
namedprocess_namegroup_memory_bytes{groupname="map[:bladebit]",memtype="swapped"} 0
namedprocess_namegroup_memory_bytes{groupname="map[:bladebit]",memtype="virtual"} 4.47847292928e+11
namedprocess_namegroup_memory_bytes{groupname="map[:pw_python.py]",memtype="resident"} 1.2959744e+07
namedprocess_namegroup_memory_bytes{groupname="map[:pw_python.py]",memtype="swapped"} 0
namedprocess_namegroup_memory_bytes{groupname="map[:pw_python.py]",memtype="virtual"} 2.4733696e+08

二、prometheus 配置

添加或修改配置

- job_name: 'dev_prometheus'scrape_interval: 10shonor_labels: truemetrics_path: '/metrics'static_configs:- targets: ['127.0.0.1:9090','127.0.0.1:9100']labels: {cluster: 'dev',type: 'basic',env: 'dev',job: 'prometheus',export: 'prometheus'}- targets: ['127.0.0.1:9256']labels: {cluster: 'dev',type: 'process',env: 'dev',job: 'prometheus',export: 'process_exporter'}

重启prometheus服务

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

三、grafana出图

process-exporter对应的dashboard为:https://grafana.com/grafana/dashboards/249

效果如下

在这里插入图片描述

四、常用监控规则

进程数

alert: 进程告警
expr: sum(namedprocess_namegroup_states) by (cluster,job,instance) > 500
for: 20s
labels:severity: warning
annotations:value: 服务器当前已产生 {{ $value }} 个进程,大于告警阈值

僵尸进程数

alert: 进程告警
expr: sum by(cluster, job, instance, groupname) (namedprocess_namegroup_states{state="Zombie"}) > 0
for: 1m
labels:severity: warning
annotations:value: 当前产生 {{ $value }} 个僵尸进程

进程重启

alert: 进程重启告警
expr: ceil(time() - max by(cluster, job, instance, groupname) (namedprocess_namegroup_oldest_start_time_seconds)) < 60
for: 25s
labels:label: alert_onceseverity: warning
annotations:value: 进程 {{ $labels.groupname }}{{ $value }} 秒前发生重启

进程退出

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}} 已退出

五、Ansible批量添加

在这里插入图片描述

这里采用Consul注册发现方式,相关类容可以查询网上

5.1Consul注册脚本

#!/bin/bash
service_name=$1
instance_id=$2
ip=$3
port=$4curl -X PUT -d '{"id": "'"$instance_id"'","name": "'"$service_name"'","address": "'"$ip"'","port": '"$port"',"tags": ["'"$service_name"'"],"checks": [{"http": "http://'"$ip"':'"$port"'","interval": "5s"}]}' http://10.1.8.202:8500/v1/agent/service/register

Ansible剧本脚本

[root@openvpn process]# cat playbook.yml 
- hosts: Harvesterremote_user: rootgather_facts: notasks:- name: 推送采集器安装包unarchive: src=process-exporter.tar.gz dest=/usr/local/- name: 重命名shell: |cd /usr/local/ if [ ! -d process-exporter ];then mv process-exporter-0.4.0.linux-amd64  process-exporter fi- name: 查询主机名称shell: echo "h-`hostname`"register: name_host- name: 推送system文件copy: src=process_exporter.service dest=/usr/lib/systemd/system- name: 启动服务systemd: name=process_exporter state=started enabled=yes- name: 推送注册脚本copy: src=consul-register.sh dest=/usr/local/process-exporter- name: 注册当前节点shell: /bin/sh /usr/local/process-exporter/consul-register.sh {{ group_names[0] }} {{ name_host.stdout  }} {{ inventory_hostname }} 9256

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11772.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解LeetCode——854. 相似度为 K 的字符串(难度:困难)

一、题目 对于某些非负整数 k &#xff0c;如果交换 s1 中两个字母的位置恰好 k 次&#xff0c;能够使结果字符串等于 s2 &#xff0c;则认为字符串 s1 和 s2 的 相似度为 k 。 给你两个字母异位词 s1 和 s2 &#xff0c;返回 s1 和 s2 的相似度 k 的最小值。 二、示例 2.1…

C语言手写HTTPD网站服务器

网站服务器&#xff08;HTTPD&#xff09;已经有很多版本&#xff0c;但是大部分对初学者都非常不友好。适合初学者学习的httpd服务器&#xff0c;最负盛名的当数tinyhttpd, 但是这个版本&#xff0c;是基于Linux系统的&#xff0c;而且配套的CGI也是使用perl语言写的&#xff…

宝塔面板修改secure_file_priv设置

1、secure_file_priv文件作用 mysql读取系统文件权限的设置参数 2、查询secure_file_priv设置 show variables like %secure%; 3、修改secure_file_priv设置 设置 secure_file_priv"/" 需要修改mysql配置文件my.cnf my.cnf文件有两个位置 /etc/my.cnf /www/serv…

线程安全简述

目录 1、线程是否安全 2、出现线程安全的原因如下&#xff1a; 3、原子性问题 4、synchronized关键字 1、锁对象 2、用法&#xff1a; 3、可重入锁 5、内存可见性 6、volatile关键字 7、JMM 1、线程是否安全 线程不安全就是一些代码在多线程的运行状态下&#xff0c…

一个基于.Net Core开发的适合外贸商城系统

今天给大家推荐一个适合外贸的商城系统。 项目简介 这是一个基于.Net Core开发的&#xff0c;兼容PC、平板、移动端的商城系统。被下载次数超过300w&#xff0c;拥有最活跃的成员&#xff0c;由专业团队开发与支持。支持PayPal、信用卡、发票支付。 技术架构 1、跨平台&…

Jmeter电商系统压测实战<二>

目录一、Jmeter优化tips二、Jmeter的使用建议-参数配置1. XX:MaxMataspaceSize&#xff08;jdk8的参数&#xff09;2. -Xmx2048m3. -Xms1g三、Jmeter插件1. 介绍及安装2. 常用插件四、Jmeter日志收集1. 概览2. elk&#xff0c;kibana和es的安装和配置3. Prometheus和Node Expor…

全系标配L2占比首次突破30%,「数据」赛道争夺战一触即发

智能驾驶的进阶战&#xff0c;无论是提升车型产品竞争力&#xff0c;还是为高阶功能和现有功能优化提供闭环数据迭代&#xff0c;全系标配已经成为主流趋势。 如果说智能化1.0阶段&#xff0c;车企拼的是技术的快速落地和高阶能力的标杆效应&#xff0c;那么2.0阶段就是拼规模…

python中validators库用法详解

首先安装validators库&#xff1a; pip install validators validators.between(value, minNone, maxNone) 验证一个数字value是否在最小值min和最大值max之间&#xff0c;value不仅仅可以是整数&#xff0c;也可以是其它数据类型&#xff0c;例如floats, decimals 和 dates。…

Three使用OimoPhysics实现物体相关物理特性实例

基础环境搭建&#xff1a; InstancedMesh()创建的立方体物品集合&#xff1a; boxes new THREE.InstancedMesh(new THREE.BoxGeometry(0.1, 0.1, 0.1),new THREE.MeshLambertMaterial(),100)const matrix new THREE.Matrix4()const color new THREE.Color()for (let i 0; i…

Win11 22H2 22621.521大版本更新!

注意&#xff01;注意&#xff01;Win11 22H2 22621.521大版本更新啦&#xff0c;此次更新带来了不小的优化和改进&#xff0c;包括带有标签的更新文件资源管理器、更丰富的开始菜单和任务栏体验、增强的搜索功能、对改进的安全性和无密码登录的支持等等。 让每个人都能更轻松、…

生成网络论文阅读styleGAN1(一):论文速览

研究什么内容 研究如何把生成图片当中的内容拆分开 研究方法 为了把各种风格分开先得把控制信息分开输入&#xff0c;于是作者就分开输入了&#xff0c;在PGGAN的基础上分开输入&#xff0c;取得了好的效果。 个人理解 1.这里能取得好效果的主要原因是PGGAN的逐渐提升像素…

多模块间通信存在完美的设计么?

一、前言 在 App 的使用中&#xff0c;常常会有一些功能的依赖&#xff0c;比如评论需要用户登录、支付需要用户实名绑定银行卡等。从代码开发角度而言&#xff0c;如果我们的项目使用了多模块&#xff0c;那么也就会出现模块依赖的场景&#xff0c;比如评论模块依赖登录模块提…

企业复杂的数据治理需求,TempoDF让数据开发更简单!

伴随着企业的发展以及信息化建设的不断深入&#xff0c;业务之间不关联、数据之间彼此独立、流程之间相互封闭的现象越来越普遍&#xff0c;“数据孤岛”问题愈发严重&#xff0c;已成为制约企业发展的桎梏。 为了实现企业全局数据的系统化运作管理&#xff0c;不少企业开始着…

PDF转换成PPT后格式混乱,可能这个没做好

PDF转换成PPT后格式混乱怎么处理?这类问题其实对于经常使用PPT的朋友们来说并不陌生。我们有时候需要把一篇PPT演讲稿转换成PDF文档&#xff0c;但在操作过程中常常不仅过程复杂且效果不理想。有时甚至在转化之后出现格式混乱&#xff0c;影响了阅读体验不说&#xff0c;还会让…

WPF 图片头像自由剪切器实时截图细节放大器

本文参考博文&#xff1a;WPF 自定义图片剪切器 - 头像剪切&#xff08;扩展与完善、实时截图&#xff09; 在网上找了好久都找不到合适的截图框架&#xff0c;只能用WPF 自定义图片剪切器 - 头像剪切&#xff08;扩展与完善、实时截图&#xff09;_孤夜一点星的博客-CSDN博客…

《uni-app》表单组件-form表单

本文分享的Form组件为uni-app的内置组件Form&#xff0c;非扩展组件&#xff0c;两者在用法上其实大同小异&#xff0c;只是扩展组件的属性以及事件更多…没有本质上的区别&#xff5e; 《uni-app》表单组件-form表单一. 简介二. 基础用法三. submit事件四. reset事件五. repor…

虚拟机是什么意思?

&#x1f308; 个人主页&#xff1a;python老鸟的博客 &#x1f506; 所属专栏&#xff1a;Python基础教程 ❤️ 刷题 &#x1f449; Python练习题库&#xff0c;不断更新中~~ &#x1f64f; 如果觉得博主文章对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注 …

安卓APT技术讲解(下)-实现安卓组件化的路由功能

前言&#xff1a; 组件化是安卓目前很流行的一门技术&#xff0c;其目的是避免复杂的业务逻辑交织到一起&#xff0c;相互影响。通过解耦&#xff0c;让每个子项目都是一个独立的工程&#xff0c;即使其余模块出现问题&#xff0c;也不会影响这个子模块的运行。 本篇系“利用A…

为k8s节点预留资源,防止pod占用资源过多导致雪崩

Kubernetes 的节点可以按照节点的资源容量进行调度&#xff0c;默认情况下 Pod 能够使用节点全部可用容量。这样就会造成一个问题&#xff0c;因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。除非为这些系统守护进程留出资源&#xff0c;否则它们将与 Pod 争…

70 QDateTime时间戳转换有误

1 前言 在开发工具中需要用时间戳转换成格式化时间来显示&#xff0c;但引用QT中自带的时间类QDateTime转换时&#xff0c;发现转换时间有误问题&#xff0c;转换的结果时分秒是正确的&#xff0c;但月份确实错误的。因此在未深入研究qt实现情况下&#xff0c;需要得到正确的格…