配置 文本文件收集器
# mkdir -p /var/lib/node_exporter/textfile_collector # echo 'metadata{role="docker_server",datacenter="NJ"} 1' | sudo tee /var/lib/node_exporter/textfile_collector/metadata.prom 注:文本文件收集器,默认事加载的,我们只需要指定目录 --collector.textfile.directory=""
启用 system 收集器
采用 --collector.systemd.unit-whitelist=“.+“ ,使用正则表达式
运行节点导出器
# node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd -collector.systemd.unit-whitelist=“(docker|sshd|rsyslog).service“--web.listen-address=“0.0.0.0:9600" --web.telemetrypath="/node_metrics“ # nohup node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd -collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" > node_exporter.out 2>&1 &
在服务器上过滤收集器
curl https://raw.githubusercontent.com/aishangwei/prometheus-demo/master/prometheus/prometheus.yml
使用 params 参数配合 collect ,过滤想要的数据
curl -g -X GET http://192.168.20.172:9100/metrics?collect[]=cpu
检查语法
promtool check config /etc/prometheus/prometheus.yml
sum、increase、by()函数
counter 类型数据修饰后的曲线图
(1-(sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total[1m])) by(instance)))*100
gauge类型使用相对容易,直接输入key即可展示图形
模糊匹配,与现实大于指定数值匹配
node_cpu_seconds_total{mode=~"idl*"} >100
rate函数
专门配合counter类型数据使用的函数。功能:是按照设置一个时间段,取counter在这个时间段中的 平均每秒增量
increase函数
取一段时间增量的总量
topk()函数
取前几位的最高值
Gauge类型的使用
topk(3,key)
Counter类型的使用
topk(3,rate(key[1m]))
count()函数
把数值符合条件的输出数目进行加合
prometheus 后台运行的方法
1.安装screen工具放入后台运行
screen回车进入后台,直接启动prometheus
然后ctrl + AD 放入后台
screen -ls 查看运行在后台的程序
screen -r PID 回到前台
2.使用daemonize 放入后台
守护进程管理软件
git clone git://github.com/bmc/daemonize.git
sh configure && sudo make install
daemonize -c /data/prometheus/ /data/prometheus/up.sh
生产环境up.sh
/data/prometheus --web.listen-address="0.0.0.0:9090" --web.read-timeout=5m --web.max-connections=10 --storage.tsdb.retention=15d --storage.tsdb.path="data/" --query.max=concurerency=20 --query.timeout=2m
自定义编写采集脚本 pushgateway
pushgateway 的介绍 pushgateway 是另⼀种采⽤被动推送的⽅式(⽽不是exporter 主动获取)获取监控数据的prometheus 插件
它是可以单独运⾏在 任何节点上的插件(并不⼀定要在被监 控客户端) 然后 通过⽤户⾃定义开发脚本 把需要监控的数据 发送给 pushgateway 然后pushgateway 再把数据 推送给prometheus server 接
pushgatway 的安装和运⾏和配置
pushgateway 跟 prometheus和 exporter ⼀样
下载地址 https://prometheus.io/download/#pushgateway 解压后 直接运⾏github的官⽅地址 https://github.com/prometheus/pushgateway
又是以go语⾔开发的, ⽤go开发的程序 在安装运⾏时 就是这 么得天独厚的 简单任性
在prometheus.yml 配置⽂件中, 单独定义⼀个job 然后 target 指向到 pushgateway运⾏所在的 机器名和 pushgateway运⾏的端⼜ 即可
例子:监控TCP_WAIT数
#!/bin/bash instance_name=`hostname -f | cut -d'.' -f1` #本机机器名 变量 ⽤于之后的 标签 if [ $instance_name == "localhost" ];then # 要求机器名 不能是 localhost 不然标签就没有区分了 echo "Must FQDN hostname" exit 1 fi # For waitting connections label="count_netstat_wait_connections" # 定⼀个新的 key count_netstat_wait_connections=`netstat -an | grep -i wait | wc -l` #定义⼀个新的数值netstat中 wait 的数量 echo "$label : $count_netstat_wait_connections" echo "$label $count_netstat_wait_connections" | curl --databinary @- http://prometheus.server.com:9091/metrics/job/ pushgateway1/instance/$instance_name
Grafanna 备份与还原
json
热配置
curl -X POST http://localdns:9090/-/reload //热载入配置,2.0之后,默认是关闭的,需要--web.enable-lifecycle 参数 开启 kill -HUP pid
监控Docker
#安装 cadvisor # curl https://raw.githubusercontent.com/aishangwei/prometheus-demo/master/docker/cadvisor_run.sh # docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ google/cadvisor:latest curl http://192.168.20.172:8080 curl http://192.168.20.172:8080/metrics #prometheus 添加配置 如: https://raw.githubusercontent.com/aishangwei/prometheus-demo/master/prometheus/prometheus2.yml
计算使用内存的百分比
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
删除 metrics
# curl https://raw.githubusercontent.com/aishangwei/prometheus-demo/master/prometheus/prometheus3.yml # curl https://raw.githubusercontent.com/aishangwei/prometheus-demo/master/prometheus/prometheus4.yml // 如 果是多个标签,可以使用逗号隔开 注意: go 正则表达式的库 RegExp使用 RE 表达式语法 表达式测试1 表达式测试2 (container_tasks_state|container_memory_failures_total) 匹配 • container_tasks_state • container_memory_failures_total 如果我们指定了多个源标签,需要用 ; 分开: regex1;regex2;regex3
监控磁盘空间及预计磁盘满时间
##(总空间-空闲空间)/总空间*100 (-node_filesystem_free_bytes{mountpoint="/"})/node_filesystem_size_bytes{mountpoint="/"}*100 ##预计磁盘满时间 #按取1小时内磁盘增长速率计算,如果4个小时候磁后盘爆满则返回负数值 #predict_linear(空闲空间[1h],4*3600)<0 predict_linear(node_filesystem_size_bytes{mountpoint="/"}[1h],4*3600)<0
监控服务状态
前提是 systemd收集器的数据,
node_systemd_unti_state{state="active"} #返回活动状态 node_systemd_unti_state{name="docker.service"}==1 #返回当前服务状态 up 值
服务发现
基于文件的服务发现:yaml
mkdir targets/{nodes,docker} -p
- job_name "node" file_sd_configs: - files - targets/nodes/*.json refresh_interval: 1m - job_name "docker" file_sd_configs: - files - targets/docker/*.json refresh_interval: 5
# cat targets/nodes/nodes.json [{ "targets": [ "192.168.20.174:9100", "192.168.20.175:9100", "192.168.20.176:9100" ] }] # cat targets/docker/daemons.json [{ "targets": [ "192.168.20.172:8080", "192.168.20.173:8080", "192.168.20.174:8080" ], "labels": { "datacenter": "nj" } }] // 也可以使用下面的这种方式(YAML) # cat /etc/prometheus/targets/nodes/nodes.json - targets: - "192.168.20.172:8080" - "192.168.20.173:8080" - "192.168.20.174:8080"
基于DNS服务发现
DNS服务发现依赖于查询A、AAA或SRV DNS记录
# 基于 SRV 记录发现 scrape_configs: - job_name: ‘webapp' dns_sd_configs: - names: [‘_prometheus._tcp.xiodi.cn’] #注意:_prometheus 为服务名称,_tcp 为协议, xiodi.cn 为域名 # 基于 A 记录 - job_name: 'webapp' dns_sd_configs: - names: [ 'c720174.xiodi.cn'] type: A port: 9090
停留在世界边缘,与之惜别