shengyayun 10 X 10
shengyayun:~/blog$ source "Prometheus.sh"

shengyayun:~/blog$ printenv
CREATED_DATE = 2021-09-05
UPDATED_DATE = 2021-09-05
TAGS = centos : prometheus
CATEGORIES =

shengyayun:~/blog$ grep -lr $TAGS post
2017-09-30 collectd的部署
2019-04-29 通过Dockerfile生成镜像
2019-05-04 创建Docker私有仓库
2017-09-30 grafana的部署
2019-05-13 部署Docker容器到Kubernetes
2017-09-30 influxdb的部署
2017-12-10 mongodb的Replica Sets
2020-05-02 部署一个单机模式的Nacos
2021-09-05 Prometheus
2018-09-29 SSH自动断开的解决方法
2018-09-29 voltdb的部署
Prometheus

Prometheusis an open-source systems monitoring and alerting toolkit originally built at SoundCloud.
普罗米修斯是最初由SoundCloud建立的一套开源的系统监控及预警的工具。

[TOC]

一. 软件简介

Prometheus 与 Influxdb都是时序数据库,比起关系型数据库,它们在时间序列数据的处理上具有极大的优势,例如长期高频率记录温度传感器的数值,该数据跟时间关联较大,且数据量极大。

二. 安装 Prometheus

1. 下载

1
2
3
4
5
6
7
8
# /opt 目录类似于Windows的C://Program Files/目录
cd /opt/
# 下载prometheus的压缩文件
wget https://github.com/prometheus/prometheus/releases/download/v2.29.1/prometheus-2.29.1.linux-amd64.tar.gz
# 解压
tar xzvf prometheus-2.29.1.linux-amd64.tar.gz
# 创建软链接,便于后续进行版本升级
ln -snf /opt/prometheus-2.29.1.linux-amd64.tar.gz /opt/prometheus

2. Systemd

创建Service文件vi /usr/lib/systemd/system/prometheus.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Prometheus
After=network.target # 依赖于网络服务

[Service]
Type=simple # 启动类型:ExecStart 创建的进程作为主进程
User=nobody # 执行用户使用 nobody
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/mnt/var/prometheus --web.console.libraries=/opt/prometheus/console_libraries --web.console.templates=/opt/prometheus/consoles --web.enable-lifecycle # 启动 prometheus 进程
Restart=on-failure # 失败自动重启

[Install]
WantedBy=multi-user.target # 可以通过 systemctl enable 启用,将会将该服务包含到 multi-user.target 中,这样在启动 multi-user.target 时,将会自动启动 multi-user.target

使用Systemd的Service的好处在于,可以开机自启动,并且失败可以自动重启,简化了运维管理。

重新加载Service文件:systemctl daemon-reload
开机自启动:systemctl enable prometheus
启动服务:systemctl start prometheus
查看服务状态:systemctl status prometheus
查看服务输出:journalctl -xe -u prometheus

3. 自带的图形化界面

访问 http://127.0.0.1:9090/graph

三. 安装 Exporter

Prometheus 的官方与第三方提供了多种 Exporter,它们会采集各种监控数据,供Prometheus定期拉取(Pull)。

1. Node Exporter(硬件与操作系统)

1
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

vi /usr/lib/systemd/system/node_exporter.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=NodeExporter
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/opt/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl daemon-reload & systemctl enable node_exporter & systemctl start node_exporter

2. Mysqld Exporter(MySQL服务)

1
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz

vi /usr/lib/systemd/system/mysqld_exporter.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=MysqldExporter
After=network.target

[Service]
Type=simple
User=nobody
Environment=DATA_SOURCE_NAME=user:password@(hostname:3306)/ # TODO Change
ExecStart=/opt/mysqld_exporter/mysqld_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl daemon-reload & systemctl enable mysqld_exporter & systemctl start mysqld_exporter

3. Kafka Exporter

1
wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.3.1/kafka_exporter-1.3.1.linux-amd64.tar.gz

vi /usr/lib/systemd/system/kafka_exporter.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=KafkaExporter
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/opt/mysqld_exporter/kafka_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl daemon-reload & systemctl enable kafka_exporter & systemctl start kafka_exporter

四. Pull

Prometheus 根据配置文件中的scrape_configs,自动定期拉从Exporter拉取数据。

1. 修改配置文件

vi /opt/prometheus/prometheus.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 全局配置
global:
scrape_interval: 15s # 每隔15s从Exporter拉取一次数据(根据scrape_configs)
evaluation_interval: 15s # 每隔15s计算一次规则(根据rule_files)

# Alertmanager相关配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093

# 规则文件列表
rule_files:

# 抓取配置列表
scrape_configs:
- job_name: "prometheus" # 自带的Job,拉取Prometheus自身的数据
static_configs:
- targets: ["localhost:9090"]

## 以下为新增项

- job_name: "nodes" # 拉取 Node Exporter 的数据
static_configs:
- targets: ["localhost:9100"] # Node Exporter 默认监听 9100 端口

- job_name: "mysqld" # 拉取 Mysqld Exporter 的数据
static_configs:
- targets: ["localhost:9104"] # Node Exporter 默认监听 9104 端口

- job_name: "kafka" # 拉取 Kafka Exporter 的数据
static_configs:
- targets: ["localhost:9308"] # Node Exporter 默认监听 9308 端口

- job_name: "pushgateway"
static_configs:
- targets: ["localhost:9091"] # PushGateway 默认监听 9091 端口

2. 要求Prometheus重新加载配置文件

1
2
# 如果未添加 -web.enable-lifecycle,这个接口会返回:Lifecycle API is not enabled
curl -X POST http://localhost:9090/-/reload

五. 更好的可视化工具:Grafana

1. 安装并启动

1
2
3
4
wget https://dl.grafana.com/oss/release/grafana-8.1.1-1.x86_64.rpm
yum install grafana-8.1.1-1.x86_64.rpm

systemctl start grafana-server

2. 初始管理员密码

访问 http://localhost:3000, 默认账户为 admin:admin, admin首次登陆需要重设密码。

3. 数据源与模板

添加Prometheus为数据源,然后去Grafana的Dashboards找一些合适的模板。

1 Node Exporter for Prometheus Dashboard CN v20201010