官方帮助文档

1. Prometheus

1.1 二进制安装

官方下载连接
清华源下载连接

1.1.1 创建 prometheus 用户

  1. useradd -s /sbin/nologin prometheus

1.1.2 解压

  1. tar xvf prometheus-2.31.1.linux-amd64.tar.gz -C /usr/local/

1.1.3 修改属组

  1. chown -R prometheus.prometheus /usr/local/prometheus-2.31.1.linux-amd64/

1.1.4 创建软连接

  1. ln -sv prometheus-2.31.1.linux-amd64 /usr/local/prometheus

1.1.5 编写 unit 文件

  1. cat >/lib/systemd/system/prometheus.service<<EOF
  2. [Unit]
  3. Description=Prometheus Server
  4. Documentation=https://prometheus.io/docs/introduction/overview
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. User=prometheus
  9. Group=prometheus
  10. WorkingDirectory=/usr/local/prometheus
  11. ExecStart=/usr/local/prometheus/prometheus \
  12. --web.listen-address=:9090 \
  13. --web.enable-lifecycle \
  14. --storage.tsdb.retention=30d \
  15. --storage.tsdb.path=/data/prometheusData \
  16. --config.file=/usr/local/prometheus/prometheus.yml
  17. ExecReload=/bin/kill -HUP \$MAINPID
  18. RuntimeDirectory=prometheus
  19. RuntimeDirectoryMode=0750
  20. TimeoutStopSec=20s
  21. Restart=on-failure
  22. [Install]
  23. WantedBy=multi-user.target
  24. EOF

1.1.6 创建数据存放目录

  1. mkdir -p /data/prometheusData

1.1.7 修改目录属组

  1. chown -R prometheus.prometheus /data/prometheusData

1.1.8 启动服务

  1. systemctl enable --now prometheus.service

1.2 docker 安装

  1. # 创建目录并修改权限
  2. mkdir -p /data/prometheusData
  3. setfacl -m u:1001:rwx /data/prometheusData
  4. docker run -d \
  5. --name prometheus \
  6. -p 9090:9090 \
  7. -v etc/prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml \
  8. -v /data/prometheusData:/opt/bitnami/prometheus/data \
  9. -v bitnami/prometheus:latest

2. 监控 node 节点

2.1 安装 node_exporter

  1. # 创建prometheus用户
  2. useradd -s /sbin/nologin prometheus
  3. # 解压
  4. tar xvf node_exporter-1.3.0.linux-amd64.tar.gz -C /opt/
  5. # 修改属组
  6. chown -R prometheus.prometheus /opt/node_exporter-1.3.0.linux-amd64/
  7. # 创建软连接
  8. ln -sv node_exporter-1.3.0.linux-amd64 /opt/node_exporter
  9. # 编写unit文件
  10. cat >/lib/systemd/system/node_exporter.service<<EOF
  11. [Unit]
  12. Description=node_exporter
  13. Documentation=https://prometheus.io/docs/introduction/overview/
  14. After=network.target
  15. [Service]
  16. Type=simple
  17. User=prometheus
  18. Group=prometheus
  19. ExecStart=/opt/node_exporter/node_exporter \
  20. --web.listen-address=:9100 \
  21. --web.telemetry-path=/metrics \
  22. --collector.mountstats \
  23. --collector.systemd \
  24. --collector.ntp \
  25. --collector.tcpstat
  26. ExecReload=/bin/kill -HUP \$MAINPID
  27. ExecStop=/bin/kill \$MAINPID
  28. TimeoutStopSec=20s
  29. Restart=on-failure
  30. [Install]
  31. WantedBy=multi-user.target
  32. EOF
  33. # 启动服务
  34. systemctl enable --now node_exporter.service

访问http://localhost:9100/metrics,可以看到当前 node exporter 获取到的当前主机的所有监控数据,如下图所示:node_exporter指标数据.png
仔细观看上图可以发现,每段监控指标最开始都会有一个# HELP开头和一个# TYPE的说明,分别用于解释当前指标的含义和指标的数据类型。

2.2 添加节点信息到 Prometheus Server

为了能够让 Prometheus Server 能够从当前 node exporter 获取到监控数据,需要修改 Prometheus 配置文件 。

  1. vim prometheus.yml
  2. scrape_configs:
  3. - job_name: 'nodes'
  4. metrics_path: '/metrics'
  5. static_configs:
  6. - targets:
  7. - "10.0.0.76:9100"

修改完成后需要重启 prometheus 服务

  1. systemctl restart prometheus

访问[http://localhost:9090](http://localhost:9100),点击 Status -> Targets,可以看到对应的 exporter 显示为 up 即表明添加成功。
查看exporter.png

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

  1. # 登录mysql,创建用户并授权
  2. mysql -uroot -p744123
  3. CREATE USER 'exporter'@'localhost' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3;
  4. GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
  5. # 切换目录
  6. cd /usr/local/mysqld_exporter
  7. # 将创建的用户和密码写入配置文件中
  8. vim .my.cnf
  9. [client]
  10. host=127.0.0.1
  11. user=exporter
  12. password=123456
  13. # 启动 mysqld_exporter
  14. nohup /usr/local/mysqld_exporter/mysqld_exporter --config .my-cnf=/usr/local/mysqld_exporter/.my.cnf &
  15. # 查看 9104 端口
  16. ss -nlt | grep 9104

3.1.1 unit 文件

  1. vim /usr/lib/systemd/system/mysqld_exporter.service
  2. [Unit]
  3. Description=node_exporter
  4. Documentation=https://prometheus.io/
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. User=prometheus
  9. Group=prometheus
  10. ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=my.cnf
  11. Restart=on-failure
  12. [Install]
  13. WantedBy=multi-user.target

3.2 添加节点信息到 Prometheus

将被监控 mysql 节点信息添加到 prometheus 的配置文件中。

  1. vim prometheus.yml
  2. scrape_configs:
  3. - job_name: 'mysqls'
  4. static_configs:
  5. - targets:
  6. - "10.0.0.81:9104"
  7. labels:
  8. app: exporter
  9. node: master

重启 prometheus 服务:

  1. systemctl restart prometheus

4. 数据展示 Grafana

Prometheus UI 提供了快速验证 PromQL 以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。
Grafana 是一款基于 Go 语言开发的通用可视化工具,支持从多种不同的数据源加载并展示数据。默认监听于 TCP 协议的 3000 端口,支持集成其他认证服务,且能够通过/metrics输出内建指标。

4.1 安装

Grafana 官网提供不同发行版的 linux 安装包,下载对应版本后安装后即可使用。

4.1.1 二进制

  • Ubuntu

    1. apt install -y adduser libfontconfig1
    2. wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.2.2_amd64.deb
    3. dpkg -i grafana-enterprise_8.2.2_amd64.deb
  • CentOS

    1. wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.2-1.x86_64.rpm
    2. yum install -y grafana-enterprise-8.2.2-1.x86_64.rpm

    4.1.2 Docker

    1. 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 快捷入口也可以。
    grafana数据源配置01.jpg
    然后这里选择对应的数据源进入配置界面:
    grafana数据源配置02.jpg
    grafana数据源配置03.png
    填写对应的数据源 URL,最后点击最下面的Save & test即可。注意:一定要确认出现 Data source is working 这句话,表明 Grafana 已经跟 Prometheus 连接上了。

    4.3 导入Dashboards

    在 Grafana 中,配置好的仪表盘是以 JSON 存储的。这也就是说,如果你把你的 JSON 数据分享出去,别人就可以直接导入同样的仪表盘来使用了(前提是你们的监测数据一样)。
    Grafana 官网提供了仪表盘市场 ,可以找到很多别人已经做好的仪表盘,用来监测非常多标准化的服务。比如这里我们搜索一个 node:
    grafana导入Dashboard-01.png
    选择第一个Node Exporter Full模板,然后复制右边的 Dashboard ID,或者下载 JSON 文件也可以。
    grafana导入Dashboard-02.png
    然后在 Grafana 首页左边的导航栏依次点击+ 按钮 -> import,进入Dashboard Import 界面,填写 Dashboard ID,或者Dashboard JSON,最后点击 Load 即可。
    grafana导入Dashboard-03.png
    最后配置 Import 的 Dashboard 名称,文件夹,数据源即可。
    grafana导入Dashboard-04.png

    5. 告警管理 alert management