文章目录
- 关于Prometheus
- 介绍
- 数据格式与实例
- 四种数据类型
- promql
- 相关组件
- Centos7 安装 Prometheus
- Centos7 安装 Go 环境
- Centos7 安装 Prometheus
- 配置 Prometheus
- 启动与使用
- Centos7 安装与配置 Grafana
- 安装 Grafana
- 配置数据源
- dashboards
- Prometheus + Grafana 监控案例
- 监控 Linux 服务器
- 监控 mysql
- 监控 redis
- 监控 kafka
- 监控 Nginx
- 监控业务
- Prometheus 查询
- 参考
关于Prometheus
介绍
1、prometheus 存储的是时序数据,适合监控一些随时间变化的场景
2、原理:通过HTTP协议周期性抓取(Pull方式)被监控组件的状态,好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境,比如VM或者Docker。输出被监控组件信息的Http接口叫exporter。
3、特点
Prometheus Server 负载定时在目标上抓取 metrics(指标)数据,每个抓取目标都需要暴露一个 HTTP 服务接口用于 Prometheus 定时抓取。这种调用被监控对象获取监控数据的方式被称为 Pull(拉)。Pull 方式体现了 Prometheus 独特的设计哲学与大多数采用 Push(推)方式的监控不同
Pull 方式的优势是能够自动进行上游监控和水平监控,配置更少,更容易扩展,更灵活,更容易实现高可用。简单来说就是 Pull 方式可以降低耦合。由于在推送系统中很容易出现因为向监控系统推送数据失败而导致被监控系统瘫痪的问题。所以通过 Pull 方式,被采集端无需感知监控系统的存在,完全独立于监控系统之外,这样数据的采集完全由监控系统控制
4、时序(time series)是由名字(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序
5、metric名字:表示metric的功能,如 http_request_total
数据格式与实例
1、数据格式:<metric name>{<label name>=<label value>, ...}
2、实例
up{job="<job-name>", instance="<instance-id>"}: 1 表示该实例正常工作
up{job="<job-name>", instance="<instance-id>"}: 0 表示该实例故障
四种数据类型
1、Counter
Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。
http_response_total{method=”GET”,endpoint=”/api/tracks”} 100
2、Gauge
Gauge 瞬时数据,比如内存使用率、CPU使用率等。
3、Histogram
<basename>_bucket{le="<upper inclusive bound>"}
<basename>_bucket{le="+Inf"}
<basename>_sum
<basename>_count
Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。
4、Summary
<basename>{quantile="<φ>"}
<basename>_sum
<basename>_count
Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。
count=7次,sum=7次的值求值。
它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。
promql
做查询 与 报警
相关组件
参考:https://baijiahao.baidu.com/s?id=1689945188583938997&wfr=spider&for=pc
1、Prometheus Server:Prometheus 的核心部分,负责实现对监控数据的获取,存储以及查询;
- 静态或动态的配置管理监控目标;
- 本身具有时序数据库的功能;
- 对外提供自定义的 PromQL 语言,可以查询分析;
- 内置 Express Browser UI, 可以通过该 UI 用 PromQL 实现数据的查询以及可视化
2、push gateway:接收由 Client push 过来的指标数据,在指定的时间间隔,由主程序来抓取;
Prometheus Server 与 Exporter 无法直接通信时,可以利用 PushGateway 来进行中转。
3、Exporter:采集数据,并通过 HTTP 服务的形式暴露给 Prometheus Server;
例子:node_exporter、mysqld_exporter、haproxy_exporter 等。
4、Alertmanager:Prometheus 体系中的告警处理中心;
Prometheus Server 中支持基于 PromQL 创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由 AlertManager 进行管理;
可以邮件、webhook 等方式预警。
Centos7 安装 Prometheus
参考:
Centos7 安装 Go 环境
wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz #下载包
sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz #解压包
sudo vim /etc/profile #打开环境变量配置文件,写入如下内容(位置根据实际的存放位置为准)
export GO_HOME=/usr/local/go
export PATH=$GO_HOME/bin:$PATH
source /etc/profile # 重启环境变量
go version #查看版本号验证是否安装成功
Centos7 安装 Prometheus
cd /usr/software
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
tar -zxvf prometheus-2.26.0.linux-amd64.tar.gz -C /usr/local/
配置 Prometheus
官网说明:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
https://www.jianshu.com/p/b9d15f236e02
global:全局配置
alerting:Alertmanager相关配置
rule_files:规则文件列表,使用’evaluation_interval’ 参数抓取
scrape_configs:抓取配置列表
cd /usr/local/prometheus-2.26.0.linux-amd64
vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
启动与使用
1、启动
注意:prometheus 没有自带任何加密措施,因此尽量不要暴露所使用的端口,通过 grafana去查看监测数据,实在要用 prometheus 的UI 的话,可以做 Nginx 加密;
# 后台启动,并修改开放端口
nohup ./prometheus --config.file=prometheus.yml --web.enable-lifecycle --web.listen-address=:19908 &
# 查看启动状态
ps -ef | grep prometheus
lsof -i:19908
# 查看启动的命令行参数
./prometheus -h
2、常用启动参数
# 启动使用的配置文件
--config.file=prometheus.yml
# 是否启用 API,启用API后,可以通过 API指令完成 Prometheus 的 停止、热加载配置文件 等
--web.enable-lifecycle
# 服务监听端口
--web.listen-address=:19908
# 是否启用 admin api 的访问权限(TSDB管理API)
--web.enable-admin-api
# 保留数据的天数
--storage.tsdb.retention.time=7d
3、API
# 查看当前配置
curl http://localhost:9090/api/v1/status/config
# 使修改后的配置生效
curl -XPOST http://localhost:19908/-/reload
4、强行关闭 Prometheus
lsof -i:19908
kill -9 pid
Centos7 安装与配置 Grafana
官网:https://grafana.com/grafana/download
配置文件说明:
Dashboards :https://grafana.com/grafana/dashboards
安装 Grafana
wget https://dl.grafana.com/oss/release/grafana-7.5.3-1.x86_64.rpm
sudo yum install grafana-7.5.3-1.x86_64.rpm
yum clean all
vim /etc/grafana/grafana.ini
# 编辑
http_port = 13818
# 保存
systemctl enable grafana-server
systemctl start grafana-server
访问 ip:13818
配置数据源
访问 ip:3000,初始用户名和密码都是 admin,修改新密码后进入
1、点击 Configuration -> Add data source
2、选择 Prometheus
3、Dashboards 选择 Prometheus 2.0 Stats ,Import
4、Settings 写入 Prometheus 的 IP 和 端口,我这里写为 http://localhost:19908
5、点击 Save & Test
6、进入 Dashboards,选择 prometheus-2-0-stats,即可看到监控数据
dashboards
网址:https://grafana.com/grafana/
服务器推荐:https://grafana.com/grafana/dashboards/8919
Docker 推荐:https://grafana.com/grafana/dashboards/8321
Prometheus + Grafana 监控案例
exporter 案例:https://prometheus.io/docs/instrumenting/exporters/
监控 Linux 服务器
参考: https://www.jianshu.com/p/7bec152d1a1f
1、被监控服务器 同步时间
yum install ntpdate -y
ntpdate ntp5.aliyun.com
date # 或 timedatectl
2、在被监控的机器下载与安装 node_exporter
查看最新 Release:
https://github.com/prometheus/node_exporter/
cd /usr/software
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar -zxvf node_exporter-1.1.2.linux-amd64.tar.gz -C /usr/local/
3、启动 node_exporter
命令启动 (不推荐):
cd /usr/local/node_exporter-1.1.2.linux-amd64
nohup ./node_exporter --web.listen-address=:19918 &
启动参数:
#node_exporter监听的端口,默认是9100,若需要修改则通过此参数。
--web.listen-address=":19918"
#获取metric信息的url,默认是/metrics,若需要修改则通过此参数
--web.telemetry-path="/metrics"
#设置日志级别
--log.level="info"
#设置打印日志的格式,若有自动化日志提取工具可以使用这个参数规范日志打印的格式
--log.format="logger:stderr"
做成系统服务并启动 (优秀教程:)
# centos 7.9
cat > /usr/lib/systemd/system/node_exporter.service << EOF
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter-1.1.2.linux-amd64/node_exporter --web.listen-address=:19918
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
chmod 754 /usr/lib/systemd/system/node_exporter.service
systemctl daemon-reload && systemctl enable node_exporter.service && systemctl start node_exporter.service
systemctl daemon-reload && systemctl restart node_exporter.service && systemctl status node_exporter
systemctl status node_exporter
# ubuntu 14.04
cd /usr/local/node_exporter-1.1.2.linux-amd64
nohup ./node_exporter --web.listen-address=:19918 &
# ubuntu 18.04
su # 进入 root
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter-1.1.2.linux-amd64/node_exporter --web.listen-address=:19918
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
chmod 754 /etc/systemd/system/node_exporter.service
systemctl daemon-reload && systemctl enable node_exporter.service && systemctl start node_exporter.service
systemctl daemon-reload && systemctl restart node_exporter.service && systemctl status node_exporter
systemctl status node_exporter
查看监控指标:
curl http://localhost:19918/metrics;
# 简单的指标说明:
node_boot_time: 系统启动时间
node_cpu: 系统CUP使用情况
node_disk_*: 磁盘io
node_filesystem_*: 文件系统使用量
node_load1: 系统负载
node_memory_*: 系统内存使用量
node_network_*: 网络宽带
node_time: 当前系统时间
go_*: node exporter中go相关指标
*process_ :**node exporter自身进程相关指标
5、prometheus 的配置文件添加监控项
Centos机器 29 台:
172、173、174、175、176、177、178、179、180、181、182、183、184、185、
186、·187、188、189、190、197、198
89、91、93、94
下载的四台
Ubuntu机器 13 台:
164、165、166、168、169、170、171
85、86、87、88、90、92
cd /usr/local/prometheus-2.26.0.linux-amd64
vim prometheus.yml
- job_name: 'server_91'
crape_interval: 8s
static_configs:
- targets: ['192.168.10.106:19918']
labels:
instance: Prometheus
# 保存
# 热重启 Prometheus
curl -XPOST http://localhost:19908/-/reload
6、导入 dashboard
Dashboards -> Manage -> Import -> mport via grafana.com -> 输入8919 -> 点击 load
监控 mysql
参考:
1、在被监控的mysql所在的服务器安装 mysql_export
cd /usr/software
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/
2、配置 被监控机器的 mysql
mysql -u root -p
CREATE USER 'mysql_exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'localhost';
cd /usr/local/mysqld_exporter-0.12.1.linux-amd64
vim .my.cnf
[client]
user=mysql_exporter
password=123456
3 、启动 mysql_export
命令启动(不推荐)
cd /usr/local/mysqld_exporter-0.12.1.linux-amd64
# 如需修改端口,可加参数 --web.listen-address=:9104(默认是9104)
nohup ./mysqld_exporter --config.my-cnf=.my.cnf &
curl http://localhost:9104/metrics
做成系统服务启动
# centos 7.9
cat > /usr/lib/systemd/system/mysqld_exporter.service << EOF
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter-1.1.2.linux-amd64/node_exporter --config.my-cnf /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
chmod 754 /usr/lib/systemd/system/mysqld_exporter.service
systemctl daemon-reload && systemctl enable mysqld_exporter.service && systemctl start mysqld_exporter.service && systemctl status mysqld_exporter
systemctl daemon-reload && systemctl restart mysqld_exporter.service && systemctl status mysqld_exporter
systemctl status mysqld_exporter
4、配置 Prometheus 配置文件,并热重启
- job_name: 'mysql'
static_configs:
- targets: ['xxx.xxx.xx.164:9104','xxx.xxx.xx.165:9104','xxx.xxx.xx.166:9104']
curl -XPOST http://localhost:19908/-/reload
5、在 Grafana 中 添加 dashboard
Dashboards -> Manage -> Import -> mport via grafana.com -> 输入7362-> 点击 load
监控 redis
1、在要被监控的redis 所在的机器上下载与安装 redis_exporter
cd /usr/software/
wget https://github.com/oliver006/redis_exporter/releases/download/v1.20.0/redis_exporter-v1.20.0.linux-amd64.tar.gz
tar -zxvf redis_exporter-v1.20.0.linux-amd64.tar.gz -C /usr/local
2 、启动 redis_exporter
命令启动(不推荐)
cd /usr/local/redis_exporter-v1.20.0.linux-amd64
# 如需修改端口,可加参数 --web.listen-address=:9121(默认是9121)
nohup ./redis_exporter -redis.addr localhost:6379 -redis.password 123456 &
curl http://localhost:9121/metrics
做成系统服务启动
# centos 7.9
cat > /usr/lib/systemd/system/redis_exporter.service << EOF
[Unit]
Description=redis_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/redis_exporter-v1.20.0.linux-amd64/redis_exporter -redis.addr=IP:6379 -redis.password=passwd
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
chmod 754 /usr/lib/systemd/system/redis_exporter .service
systemctl daemon-reload && systemctl enable redis_exporter .service && systemctl start redis_exporter .service && systemctl status redis_exporter
systemctl daemon-reload && systemctl restart redis_exporter .service && systemctl status redis_exporter
systemctl status redis_exporter
4、配置 Prometheus 配置文件,并热重启
- job_name: redis_exporter
static_configs:
- targets: ['xxx.xxx.xx.85:9121','xxx.xxx.xx.86:9121']
curl -XPOST http://localhost:19908/-/reload
5、在 Grafana 中 添加 dashboard
Dashboards -> Manage -> Import -> mport via grafana.com -> 输入763-> 点击 load
https://grafana.com/dashboards/763/revisions
监控 kafka
1、在被监控的kafka集群所在的任意一台服务器安装 kafka_exporter
cd /usr/software
wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-amd64.tar.gz
tar -zxvf kafka_exporter-1.2.0.linux-amd64.tar.gz -C /usr/local/
2、启动 kafka_exporter
命令启动(不推荐)
cd /usr/local/kafka_exporter-1.2.0.linux-amd64
# 如需修改端口,可加参数 --web.listen-address=:9308(默认是9308)
nohup ./kafka_exporter --kafka.server=localhost:9308 &
curl http://localhost:9308/metrics
做成系统服务启动
# centos 7.9
cat > /usr/lib/systemd/system/kafka_exporter.service << EOF
[Unit]
Description=kafka_exporter
Documentation=https://prometheus.io/
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter-1.1.2.linux-amd64/node_exporter --kafka.server=localhost:9096
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
chmod 754 /usr/lib/systemd/system/kafka_exporter.service
systemctl daemon-reload && systemctl enable kafka_exporter.service && systemctl start kafka_exporter.service && systemctl status node_exporter
systemctl daemon-reload && systemctl restart kafka_exporter.service && systemctl status kafka_exporter
systemctl status node_exporter
3、配置 Prometheus 配置文件,并热重启
- job_name: 'kafka'
static_configs:
- targets: ['xxx.xxx.xx.170:9308']
curl -XPOST http://localhost:19908/-/reload
4、在 Grafana 中 添加 dashboard
7589、10466、11963
Dashboards -> Manage -> Import -> mport via grafana.com -> 输入7589-> 点击 load
监控 Nginx
参考: https://it.baiked.com/nginx/2697.html
promethues监控nginx可选两个exporter,通过nginx_exporter主要是获取nginx-status中的内建的指标,nginx自身提供status信息,较为简单,promethues中对应的metrics也较少,想要监控更多的指标可以通过nginx-vts-exporter采集信息,依赖在编译nginx的时候添加nginx-module-vts模块来实现。
nginx virtual host traffic status模块是nginx第三方模块之一,vts提供了访问虚拟主机状态的信息,包含server,upstream以及cache的当前状态,类似于NGINX Plus 提供的在线活动监控功能。
1、安装 nginx-exporter
docker pull fish/nginx-exporter
docker run -it fish/nginx-exporter
# 新开一个终端
docker ps|grep nginx-exporter
docker cp 容器ID:/usr/local/bin/nginx_exporter /opt/
# 执行成功则说明安装成功
/opt/nginx_exporter --help
# 退出容器
mkdir -p /etc/nginx_exporter/bin/
mv /opt/nginx_exporter /etc/nginx_exporter/bin/
2、配置 nginx
vi /etc/nginx/sites-enabled/status.conf
server {
listen 8011;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
}
}
nginx -s reload
/etc/nginx/sites-enabled# curl 127.0.0.1:8011/nginx_status
3、封装为系统 service
vim /lib/systemd/system/nginx_exporter.service
[Unit]
Description=nginx monitor
After=network.target
[Service]
ExecStart=/etc/nginx_exporter/bin/nginx_exporter -nginx.scrape_uri="http://127.0.0.1:8011/nginx_status"
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable nginx_exporter.service
systemctl start nginx_exporter.service
netstat -anpt|grep nginx_exporte
curl 127.0.0.1:9113/metrics
4、配置 Prometheus
cd /usr/local/prometheus-2.26.0.linux-amd64
vim prometheus.yml
- job_name: nginx_exporter
static_configs:
- targets: ['192.168.10.139:9113']
# prometheus 热重启
curl -XPOST http://localhost:19908/-/reload
监控业务
Prometheus 查询
http_requests_total
http_requests_total{code="200", handler="query"}
http_requests_total{code~="2xx"}
http_requests_total > 100
http_requests_total[5m]
count(http_requests_total)
sum(http_requests_total)
avg(http_requests_total)
topk(3, http_requests_total)
irate(http_requests_total[5m])
参考
prometheus 中文指南:https://yunlzheng.gitbook.io/prometheus-book/
Prometheus 官方文档:https://prometheus.io/docs/introduction/overview/
Grafana 官方文档:http://docs.grafana.org/
全面学习Prometheus:http://dockone.io/article/5716?tdsourcetag=s_pcqq_aiomsg
Prometheus 非官方中文手册:https://www.bookstack.cn/read/prometheus-manual/README.md
Prometheus 实战:https://songjiayang.gitbooks.io/prometheus/content/
prometheus-book:https://yunlzheng.gitbook.io/prometheus-book/
Grafana的一些实用技巧: