基于Systemd守护进程的Prometheus+Grafana+Node_exporter监控部署

墨写的谎言掩盖不了血写的事实。

— 鲁迅
随机引文生成自fortunes-zh包

头图参数:

parameters

hacker, server room, (masterpiece:1.2), best quality, masterpiece, highres, original, extremely detailed wallpaper, perfect lighting, (extremely detremely detailed CG:1.2),
Negative prompt: (huge breasts:1.4), (worst quality, low quality:1.4), (mutation, poorly drawn :1.2), (long body :1.3), (mutation, poorly drawn :1.2) , liquid body, long neck, uncoordinated body, fused ears, (ugly:1.4), lowres, one hand with more than 5 fingers, one hand with less than 5 fingers,
Steps: 20, Sampler: Euler a, CFG scale: 5, Seed: 1089306811, Size: 960x540, Model hash: 54d8a62d61, Model: darkSushi25D25D_v30, Denoising strength: 0.25, Hires upscale: 2, Hires steps: 20, Hires upscaler: SwinIR_4x

本文默认使用以下环境与包:

  • Ubuntu 20.04.5 LTS
  • prometheus-2.43.0
  • grafana-9.4.7
  • node_exporter-1.5.0

请注意本文仅讲解关于liunx机器的性能监控及其在Grafana上某一具体Dashboard的展示,对于告警规则和其他中间件/应用的监控本文并不涉及。

0. 基于个人使用环境下对于Zabbix与Prometheus的优劣判断

Zabbix与Prometheus都是很成熟的监控体系了,相较于Zabbix,Prometheus体系在个人监控使用上有以下优势:

  • 迁移相对简单。Zabbix Server必须要MySQL数据库,且截至目前,zabbix的最新版本无法使用最新版本的mariadb,主机还需要额外部署各种监控部件如java-gateway等,而prometheus+grafana体系只需要将目录下时序库一并移动到新的环境即可。prometheus需要在exporters部署上面花费相对更多时间,但是就个人使用的前提下,所需监控的机器并不会太多,也就稀释了这个问题。
  • zabbix的节点部件zabbix-agent需要双向通信,而prometheus只需要单向访问exporters即可。这意味着当使用DDNS来提供本地ip访问方式或是使用未备案的域名时,zabbix-agent访问zabbix-host将会不通,而prometheus就没有这个问题。
  • prometheus主控端更轻量级,部署在较差的电视盒子上都可以,zabbix部署在那上面进web管理页面可能都困难。
  • prometheus体系对k8s支持程度更高等。

本是将zabbix监控部署在某云香港主机上方便两边访问的,但续费是购买费用27倍所以作罢了。考虑本人要香港主机也没别的用处,所以最终选择了在本地部署监控,但部署zabbix时发现在家宽环境下跨境访问与防火墙配置成了大问题,这才开始换解决方案。

1. 部署Prometheus+Grafana主控端

Bash
# 本文默认在root权限下操作
# 过程文件默认保存在/downloads下
# 部署内容默认保存在/data下
# 对应的版本可以根据下述参数调整,本次以以下示例为准
export prometheusver=2.43.0
export grafanaver=9.4.7
export basicauth=aybabtu-urwer!

mkdir /downloads
mkdir /data
mkdir /data/prometheus
mkdir /data/grafana
wget https://github.com/prometheus/prometheus/releases/download/v$prometheusver/prometheus-$prometheusver.linux-amd64.tar.gz -O /downloads/prometheus-$prometheusver.linux-amd64.tar.gz
tar xzvf /downloads/prometheus-$prometheusver.linux-amd64.tar.gz -C /data/prometheus
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-$grafanaver.linux-amd64.tar.gz -O /downloads/grafana-enterprise-$grafanaver.linux-amd64.tar.gz
tar xzvf /downloads/grafana-enterprise-$grafanaver.linux-amd64.tar.gz -C /data/grafana

# 创建加密文件
apt install -y apache2-utils
# 如果使用的是CentOS 7环境,需要使用下面的包来获取htpasswd命令
# yum install -y httpd-tools
echo -e "basic_auth_users:\n  admin: "$(htpasswd -nbB -C 12 '' $basicauth | tr -d ':\n') > /data/prometheus/prometheus-$prometheusver.linux-amd64/web.yml

# 编写.service文件
useradd -rs /sbin/nologin prometheus
chown -R prometheus:prometheus /data/prometheus
cat << EOF > /lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/data/prometheus/prometheus-$prometheusver.linux-amd64/prometheus \
    --config.file /data/prometheus/prometheus-$prometheusver.linux-amd64/prometheus.yml \
    --storage.tsdb.path /data/prometheus/var/lib/prometheus/ \
    --web.console.templates=/data/prometheus/etc/prometheus/consoles \
    --web.console.libraries=/data/prometheus/etc/prometheus/console_libraries \
    --web.config.file=/data/prometheus/prometheus-$prometheusver.linux-amd64/web.yml \
    --web.listen-address=:9090 \
    --web.enable-lifecycle
[Install]
WantedBy=multi-user.target
EOF
useradd -rs /sbin/nologin grafana
chown -R grafana:grafana /data/grafana
cat << EOF > /lib/systemd/system/grafana.service
[Unit]
Description=Grafana
After=network.target

[Service]
User=grafana
Group=grafana
Type=notify
ExecStart=/data/grafana/grafana-$grafanaver/bin/grafana-server -homepath /data/grafana/grafana-$grafanaver
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 启动并配置开机自启
systemctl enable prometheus
systemctl enable grafana
systemctl start prometheus
systemctl start grafana
systemctl status prometheus
systemctl status grafana

2. 部署Node_exporter被控端

Bash
# 此部分在被控端执行
# 想要监控主控端当然也需要在主控端部署
export exportervar=1.5.0
export basicauth=WINNER~AYBABTU!

mkdir /downloads
mkdir /data
mkdir /data/exporters
wget https://github.com/prometheus/node_exporter/releases/download/v$exportervar/node_exporter-$exportervar.linux-amd64.tar.gz -O /downloads/node_exporter-$exportervar.linux-amd64.tar.gz
tar xzvf /downloads/node_exporter-$exportervar.linux-amd64.tar.gz -C /data/exporters

# 创建加密文件
apt install -y apache2-utils
# 如果使用的是CentOS 7环境,需要使用下面的包来获取htpasswd命令
# yum install -y httpd-tools
echo -e "basic_auth_users:\n  admin: "$(htpasswd -nbB -C 12 '' $basicauth | tr -d ':\n') > /data/exporters/node_exporter-$exportervar.linux-amd64/web.yml

# 编写.service文件
useradd -rs /bin/false node_exporter
cat << EOF > /lib/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
 
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/data/exporters/node_exporter-$exportervar.linux-amd64/node_exporter \
    --web.config.file=/data/exporters/node_exporter-$exportervar.linux-amd64/web.yml
 
[Install]
WantedBy=multi-user.target
EOF

# 启动并配置开机自启
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter

3. 配置主控端配置文件prometheus.yml

YAML
# 配置文件位置在/data/prometheus/prometheus-$prometheusver.linux-amd64/prometheus.yml
# 需要修改以下的部分
scrape_configs:
  # Prometheus对服务自身的配置
  - job_name: "prometheus"
    basic_auth:
      username: admin
      # 此处的密码配置与你设置的主控端加密验证是一致的
      password: aybabtu-urwer!
    static_configs:
      # 若配置改动了监听端口,此处需要修改
      - targets: ["localhost:9090"]

  # 对被控节点Node exporter的配置
  - job_name: "node_exporter"
    basic_auth:
      username: admin
      # 此处的密码配置与你设置的被控端加密验证是一致的
      password: WINNER~AYBABTU!
    static_configs:
      - targets:
        # 有多少监控节点就填多少个,当被控节点监听端口修改时记得改成监听端口
        - localhost:9100
        - 10.0.0.255:9100
Bash
# 完成配置后,重启prometheus以适配配置
systemctl restart prometheus
systemctl status prometheus
# 访问prometheus web端时,需要使用在上面使用的basic_auth密码

彩蛋:

– 滥用片假名随时都能快速治好你的低血压。

(有点想给这个图加个速度线…

(4月拍的,不记得是哪位的博客了…愿意认领的话我这边会将您的博客附注…

(moshi wore ni yuu nara, anatasama no namae wo kono article no shita de record suru. Thank you!

4. Grafana展示配置

至此,服务端都已启动,现在可以转向web端了。

Grafana的默认用户名和密码都是admin,默认的监听端口为3000。如果您这边失误修改了密码忘记了或是出于别的什么原因希望修改密码,可以使用下面的方法来修改:

/data/grafana/grafana-$grafanaver/bin/grafana-cli admin reset-admin-password admin123

首先需要设置数据源,通过设置图标进入到数据源配置。

进入后点击右上角的添加数据源,选择prometheus,然后在里面配置prometheus设置。此处prometheus与grafana部署在同一机器上,因此url可以保持默认。由于添加了basic_auth,此处需要打开basic_auth,如果使用了证书验证,此处也可以配置。

与Zabbix有一些默认的组件来展示监控数据不同,Grafana是不带默认Dashboard的。可以像Zabbix那样自己设计Dashboard,也可以到Grafana官网下载一些别人做好的。本文以1 Node Exporter Dashboard 22/04/17 通用Job分组版为例。进入页面下载对应的json文件后,即可在Grafana web端导入:

需注意grafana版本不同这些图标的位置可能有差别

导入后即可在收藏夹看到这个Dashboard,进入即可。

5. 结语

至此,Prometheus+Grafana+Node_exporter监控就已部署完成,更详细的设置尽情探索了。

6. 参考文献

  1. basic_auth的添加 — Prometheus
  2. 1 Node Exporter Dashboard 22/04/17 通用Job分组版 — Ganfana Lab
  3. 最安全的加密算法 Bcrypt,再也不用担心数据泄密了~ — 知乎 弢迹匿光
  4. grafana-更改登陆密码 — CSDN 与数据交流的路上
  5. 监控平台选Prometheus还是Zabbix ? — 知乎 云计算
  6. 【保姆级教程-超详细】zabbix 5.0 LTS企业级分布式监控服务搭建、使用及进阶 — 知乎 字诀跳动
  7. 一些内部文献
  8. 某个滥用片假名的日本博主


已发布

分类

,

作者:

标签