配置 文本文件收集器

# 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