1. Prometheus
1.1 二进制安装
1.1.1 创建 prometheus 用户
useradd -s /sbin/nologin prometheus
1.1.2 解压
tar xvf prometheus-2.31.1.linux-amd64.tar.gz -C /usr/local/
1.1.3 修改属组
chown -R prometheus.prometheus /usr/local/prometheus-2.31.1.linux-amd64/
1.1.4 创建软连接
ln -sv prometheus-2.31.1.linux-amd64 /usr/local/prometheus
1.1.5 编写 unit 文件
cat >/lib/systemd/system/prometheus.service<<EOF[Unit]Description=Prometheus ServerDocumentation=https://prometheus.io/docs/introduction/overviewAfter=network.target[Service]Type=simpleUser=prometheusGroup=prometheusWorkingDirectory=/usr/local/prometheusExecStart=/usr/local/prometheus/prometheus \--web.listen-address=:9090 \--web.enable-lifecycle \--storage.tsdb.retention=30d \--storage.tsdb.path=/data/prometheusData \--config.file=/usr/local/prometheus/prometheus.ymlExecReload=/bin/kill -HUP \$MAINPIDRuntimeDirectory=prometheusRuntimeDirectoryMode=0750TimeoutStopSec=20sRestart=on-failure[Install]WantedBy=multi-user.targetEOF
1.1.6 创建数据存放目录
mkdir -p /data/prometheusData
1.1.7 修改目录属组
chown -R prometheus.prometheus /data/prometheusData
1.1.8 启动服务
systemctl enable --now prometheus.service
1.2 docker 安装
# 创建目录并修改权限mkdir -p /data/prometheusDatasetfacl -m u:1001:rwx /data/prometheusDatadocker run -d \--name prometheus \-p 9090:9090 \-v etc/prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml \-v /data/prometheusData:/opt/bitnami/prometheus/data \-v bitnami/prometheus:latest
2. 监控 node 节点
2.1 安装 node_exporter
# 创建prometheus用户useradd -s /sbin/nologin prometheus# 解压tar xvf node_exporter-1.3.0.linux-amd64.tar.gz -C /opt/# 修改属组chown -R prometheus.prometheus /opt/node_exporter-1.3.0.linux-amd64/# 创建软连接ln -sv node_exporter-1.3.0.linux-amd64 /opt/node_exporter# 编写unit文件cat >/lib/systemd/system/node_exporter.service<<EOF[Unit]Description=node_exporterDocumentation=https://prometheus.io/docs/introduction/overview/After=network.target[Service]Type=simpleUser=prometheusGroup=prometheusExecStart=/opt/node_exporter/node_exporter \--web.listen-address=:9100 \--web.telemetry-path=/metrics \--collector.mountstats \--collector.systemd \--collector.ntp \--collector.tcpstatExecReload=/bin/kill -HUP \$MAINPIDExecStop=/bin/kill \$MAINPIDTimeoutStopSec=20sRestart=on-failure[Install]WantedBy=multi-user.targetEOF# 启动服务systemctl enable --now node_exporter.service
访问http://localhost:9100/metrics,可以看到当前 node exporter 获取到的当前主机的所有监控数据,如下图所示:
仔细观看上图可以发现,每段监控指标最开始都会有一个# HELP开头和一个# TYPE的说明,分别用于解释当前指标的含义和指标的数据类型。
2.2 添加节点信息到 Prometheus Server
为了能够让 Prometheus Server 能够从当前 node exporter 获取到监控数据,需要修改 Prometheus 配置文件 。
vim prometheus.ymlscrape_configs:- job_name: 'nodes'metrics_path: '/metrics'static_configs:- targets:- "10.0.0.76:9100"
修改完成后需要重启 prometheus 服务
systemctl restart prometheus
访问[http://localhost:9090](http://localhost:9100),点击 Status -> Targets,可以看到对应的 exporter 显示为 up 即表明添加成功。
3. 监控其他服务
Prometheus 监控数据传输是基于 http 协议的,对于像 MySQL,Memcached 这种使用自身协议的服务,需要使用对应的 exporter 服务来进行数据转换和传输。常用的 exporter 官方都提供了,没有提供的话只能二次开发了。
这里以 MySQL 为例,首先为服务安装 mysqld_exporter。
安装过程和 node_exporter 差不多,只不过名称换成了 mysqld_exporter,这里就重复了。不同的是,监控mysql,需要在 mysql 服务中创建一个账号,并对想要监控的数据库进行授权,然后还需要为 mysqld_exporter 写一个配置文件,指明监控数据库所使用的账户和密码。当然,启动服务的时候还需要使用 --config.my-cnf 参数指定配置文件路径。
3.1 配置 mysqld_exporter
# 登录mysql,创建用户并授权mysql -uroot -p744123CREATE USER 'exporter'@'localhost' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3;GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';# 切换目录cd /usr/local/mysqld_exporter# 将创建的用户和密码写入配置文件中vim .my.cnf[client]host=127.0.0.1user=exporterpassword=123456# 启动 mysqld_exporternohup /usr/local/mysqld_exporter/mysqld_exporter --config .my-cnf=/usr/local/mysqld_exporter/.my.cnf &# 查看 9104 端口ss -nlt | grep 9104
3.1.1 unit 文件
vim /usr/lib/systemd/system/mysqld_exporter.service[Unit]Description=node_exporterDocumentation=https://prometheus.io/After=network.target[Service]Type=simpleUser=prometheusGroup=prometheusExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=my.cnfRestart=on-failure[Install]WantedBy=multi-user.target
3.2 添加节点信息到 Prometheus
将被监控 mysql 节点信息添加到 prometheus 的配置文件中。
vim prometheus.ymlscrape_configs:- job_name: 'mysqls'static_configs:- targets:- "10.0.0.81:9104"labels:app: exporternode: master
重启 prometheus 服务:
systemctl restart prometheus
4. 数据展示 Grafana
Prometheus UI 提供了快速验证 PromQL 以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。
Grafana 是一款基于 Go 语言开发的通用可视化工具,支持从多种不同的数据源加载并展示数据。默认监听于 TCP 协议的 3000 端口,支持集成其他认证服务,且能够通过/metrics输出内建指标。
4.1 安装
Grafana 官网提供不同发行版的 linux 安装包,下载对应版本后安装后即可使用。
4.1.1 二进制
Ubuntu
apt install -y adduser libfontconfig1wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.2.2_amd64.debdpkg -i grafana-enterprise_8.2.2_amd64.deb
CentOS
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.2-1.x86_64.rpmyum install -y grafana-enterprise-8.2.2-1.x86_64.rpm
4.1.2 Docker
docker run -d -p 3000:3000 grafana/grafana
4.2 设置数据源
服务启动后可以通过浏览器访问
http://localhosts:3000登录 WEB 页面,默认用户密码为admin:admin,第一次登录需要修改密码。
进入 Grafana 首页会看到显示使用向导,包含基础和高级两个部分,具体使用可以参考官方文档。
这里我们点击左侧导航栏的齿轮(Configuration)按钮,选择Data sources,再点击Add data source进入数据源选择界面,或者点击向导部分的 Data sources 快捷入口也可以。
然后这里选择对应的数据源进入配置界面:

填写对应的数据源 URL,最后点击最下面的Save & test即可。注意:一定要确认出现Data source is working这句话,表明 Grafana 已经跟 Prometheus 连接上了。4.3 导入Dashboards
在 Grafana 中,配置好的仪表盘是以 JSON 存储的。这也就是说,如果你把你的 JSON 数据分享出去,别人就可以直接导入同样的仪表盘来使用了(前提是你们的监测数据一样)。
Grafana 官网提供了仪表盘市场 ,可以找到很多别人已经做好的仪表盘,用来监测非常多标准化的服务。比如这里我们搜索一个 node:
选择第一个Node Exporter Full模板,然后复制右边的 Dashboard ID,或者下载 JSON 文件也可以。
然后在 Grafana 首页左边的导航栏依次点击+ 按钮 -> import,进入Dashboard Import 界面,填写 Dashboard ID,或者Dashboard JSON,最后点击 Load 即可。
最后配置 Import 的 Dashboard 名称,文件夹,数据源即可。
5. 告警管理 alert management
