Prometheus
Prometheusis an open-source systems monitoring and alerting toolkit originally built at SoundCloud.
普罗米修斯是最初由SoundCloud建立的一套开源的系统监控及预警的工具。
[TOC]
一. 软件简介
Prometheus 与 Influxdb都是时序数据库,比起关系型数据库,它们在时间序列数据的处理上具有极大的优势,例如长期高频率记录温度传感器的数值,该数据跟时间关联较大,且数据量极大。
二. 安装 Prometheus
1. 下载
| 12
 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:
| 12
 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
| 12
 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
| 12
 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
| 12
 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
| 12
 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重新加载配置文件
| 12
 
 | # 如果未添加 -web.enable-lifecycle,这个接口会返回:Lifecycle API is not enabledcurl -X POST http://localhost:9090/-/reload
 
 | 
五. 更好的可视化工具:Grafana
1. 安装并启动
| 12
 3
 4
 
 | wget https://dl.grafana.com/oss/release/grafana-8.1.1-1.x86_64.rpmyum 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: