目录
概要
本次部署采用二进制部署,虽然不像使用yum这类命令方便,但可以保证绝大部分linux系统都可以使用。过去我曾部署过一台Prometheus的虚拟机,不过由于数据迁移导致虚拟机丢失。因此目前需要重新部署一台。以下的内容就包含了,我在重新部署的流程以及会遇到的问题。
整体架构流程
在使用二进制部署的过程中我们需要下载相应的组件。本次Prometheus由三个部分组成,Prometheus、Alertmanager、Node_exporter。以上这些组件的下载地址以及方式都会在下面的文章当中告知。最后是用于数据可视化的Grafana的安装部署。通过部署以上内容,我们就可以建立起一个最基础的数据可视化的Prometheus监控平台。在文章的最后会做一点进阶的consul集群监控。本文不做consul的详细介绍。文中会附上入门学习的链接,请自行学习。
需要注意本次的部署均为开启防火墙状态,如果你的服务器没有开启防火墙,文中和防火墙有关的命令都可以无视跳过。selinux建议关闭,开启状态下会出现很多问题。
技术细节
资源清单
系统 | IP | 主机 | 服务 |
RHEL | 192.168.135.110 | rhel1 | Prometheus+Alertmanager+node_exporter+Grafana |
RHEL | 192.168.135.120 | rhel2 | node_exporter |
一.下载Prometheus的安装包
Prometheus · GitHubPrometheus has 46 repositories available. Follow their code on GitHub.https://github.com/prometheus Prometheus所有的组件都可以在上述地址中下载。(Grafana属于第三方可视化工具,在后面安装的时候会写对应的下载地址。)
如果不想自己上GitHub找组件下载,那就直接用下面的命令下载。(请先提前安装好wget)
#promethues下载
wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
#node_exporter下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
#alertmanager下载
wet https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
#完成下载后执行以下命令
#解压刚刚下载的tar文件
tar xvf alertmanager-0.27.0.linux-amd64.tar.gz
tar xvf node_exporter-1.8.0.linux-amd64.tar.gz
tar xvf prometheus-2.54.1.linux-amd64.tar.gz
#把三个组件移动到/opt中并重命名
mv alertmanager-0.27.0.linux-amd64 /opt/alertmanager
mv prometheus-2.54.1.linux-amd64 /opt/prometheus
mv node_exporter-1.8.0.linux-amd64 /opt/node_exporter
#创建一个prometheus用户,并且上面三个目录文件的所有人和所有组
useradd -M -s /usr/sbin/nologin prometheus
#-M 不创建家目录 -s设置无法登录
chown prometheus:prometheus -R /opt/prometheus
chown prometheus:prometheus -R /opt/alertmanager
chown prometheus:proemtheus -R /opt/node_exporter
1.Prometheus组件的配置
如果你的防火墙是开启的就放行9090端口。如果没有开启,无视防火墙放行的命令。配置systemd启动服务文件。
firewall-cmd --add-port=9090/tcp
firewall-cmd --runtime-to-permanent
cat > /etc/systemd/system/prometheus.service << EOF
> [Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=always
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--web.console.libraries=/opt/prometheus/console_libraries \
--web.console.templates=/opt/prometheus/conf/consoles \
--storage.tsdb.path=/opt/prometheus/data-prometheus \
--storage.tsdb.retention.time=30d \
--web.enable-lifecycle
#最后一行的配置开启热部署,以后更新配置不需要重启systemd服务
[Install]
WantedBy=multi-user.target
> EOF
#重新加载systemd
systemctl daemon-reload
#设置开机自启,同时启动服务
systemctl enable prometheus --now
#查看服务状态
systemctl status prometheus
如果通过上面的方式无法启动,那就直接运行ExecStart后面的启动配置,可以直观的看到出现了哪些问题导致启动失败。
启动失败:
我这次的启动该失败就提到是因为占用了9090端口,可以在最后一行看到端口被占用。
有些情况是,直接运行启动配置可以,但是使用systemd会失败。systemctl status 又无法看到错误信息。这个时候我们需要使用以下命令查看。
journalctl -u prometheus.service -f
通过journalctl可以看到访问被拒绝,由此推测应该是文件权限的问题。但是前文中我们已经修改过文件的所有者。那么问题就应该是出在selinux上面。尝试关掉selinux后,问题被解决。
启动成功:
访问IP:9090/metrics就可以看到Prometheus采集上来的指标,也可以直接访问IP:9090进入Prometheus界面。
2.Alertmanager组件的部署
在prometheus.yml中添加alertmanager监听项。由于alertmanager和Prometheus在同一服务器上,因此IP地址可以写成localhost。否则需要填写alertmanager部署的服务器IP。
在规则文件处新增一个“alert.yml”报警规则。
在/opt/prometheus/目录下新增alert.yml文件,对应上述Prometheus.yml中rule_files新增的alert.yml
cat > /opt/prometheus/alert.yml << EOF
groups:
- name: Prometheus alert
rules:
- alert: 服务告警
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
instance: "{{ $labels.instance }}"
description: "{{ $labels.job }} 服务已关闭"
EOF
通过以下命令就可以检查Prometheus.yml和alert.yml文件内容是否无误。
/opt/prometheus/promtool check config prometheus.yml
防火墙放行端口,配置systemd启动服务文件。
firewall-cmd --add-port=9093/tcp
firewall-cmd --runtime-to-permanent
cat > /etc/systemd/system/alertmanager.service << EOF
> [Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/opt/alertmanager/alertmanager \
--config.file=/opt/alertmanager/alertmanager.yml \
--storage.path=/opt/alertmanager/data
[Install]
WantedBy=multi-user.target
> EOF
#重新加载systemd
systemctl daemon-reload
#设置开机自启,同时启动服务
systemctl enable alertmanager --now
#查看服务状态
systemctl status alertmanager
完成上述配置,执行以下命令热刷新就可以不适用systemd重启服务
curl -X POST http://192.168.135.110:9090/-/reload
这里可以看到alert选项中已经有了刚才添加的报警项。
3.Node_exporter组件的部署
在Prometheus.yml文件中添加如下配置。就可以实现Prometheus服务器对自己的监控了。切记targets中的引号必须是双引号。
防火墙放行端口,配置systemd启动服务文件。
firewall-cmd --add-port=9100/tcp
firewall-cmd --runtime-to-permanent
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/opt/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
EOF
#重新加载systemd
systemctl daemon-reload
#设置开机自启,同时启动服务
systemctl enable node_exporter --now
#查看服务状态
systemctl status node_exporter
点击Status中的Targets,就可以看到node_exporter已经把数据收集到了Prometheus中。
二.下载安装Grafana
1.Grafana的部署
Download Grafana | Grafana LabsOverview of how to download and install different versions of Grafana on different operating systems.https://grafana.com/grafana/download?pg=oss-graf&plcmt=hero-btn-1 通过上面的链接就可以访问Grafana的下载页面了,同样如果你不想访问我在下面也会贴出下载的命令。
#下载grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.2.0.linux-amd64.tar.gz
#解压grafana
tar xvf grafana-enterprise-11.2.0.linux-amd64.tar.gz
#移动到/opt目录下
mv grafana-v11.2.0 /opt/grafana
#改变目录的所有人
chown -R prometheus.prometheus /opt/grafana
防火墙放行端口,配置systemd启动服务文件。
firewall-cmd --add-port=3000/tcp
firewall-cmd --runtime-to-permanent
cat > /etc/systemd/system/grafana.srevice << EOF
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/opt/grafana/bin/grafana-server \
--config=/opt/grafana/conf/defaults.ini \
--homepath=/opt/grafana
[Install]
WantedBy=multi-user.target
EOF
#重新加载systemd
systemctl daemon-reload
#设置开机自启,同时启动服务
systemctl enable grafana --now
#查看服务状态
systemctl status grafana
账号密码都是admin
2.Grafana中文设置
修改/opt/grafana/conf/defaults.ini中的default_language的参数。
重启Grafana即可生效
systemctl restart grafana
3.Dashboard添加与选择
添加Prometheus为数据源。
填写Prometheus的访问地址,点击页面最下面的Save&test
通过下面的页面获得node_exporter的监控面板模板
在获取方式中选择获取ID
在按照下图的流程,粘贴刚才复制到的ID即可。
选择面板的数据源。
点击Import后,就会显示你的node_exporter获取到的数据。
如果需要查看多个服务器或集群服务器的状态,推荐使用以下的Dashboard模板。(对国人非常友好的模板)
三.接入其它监控节点
1.少量监控节点增加
在static_configs中添加新的监控节点IP,给监控节点设置名字为RHEL2。
防火墙放行端口,配置systemd启动服务文件。
firewall-cmd --add-port=9100/tcp
firewall-cmd --runtime-to-permanent
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/opt/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
EOF
#重新加载systemd
systemctl daemon-reload
#设置开机自启,同时启动服务
systemctl enable node_exporter --now
#查看服务状态
systemctl status node_exporter
#在Prometheus主节点上执行热加载
curl -X POST http://192.168.135.110/-/reload
刷新Targets页面node_exporter项目中就会有刚刚添加的新节点。
在HOST主机选项中也会出现刚刚添加的主机,选择需要查看的主机就可以查看对应的仪表盘。
2.Consul 集群接入
资源清单
系统 | IP | 主机 | 服务 |
RHEL | 192.168.135.130 | rhel3 | Consul_node(主) |
RHEL | 192.168.135.120 | rhel2 | Consul_node/node_exporter |
RHEL | 192.168.135.110 | rhel1 | Consul_node/P+G+A+node_exporter |
Debian | 192.168.135.100 | debian | node_expoter |
前文中提到在prometheus.yml文件添加每个监控节点的信息,不利于集群服务器的监控管理。现在可以通过Consul即可完成集群的监控管理。通过下面的链接可以获得下载的安装包或者直接使用我配置好的命令。
Install | Consul | HashiCorp DeveloperExplore Consul product documentation, tutorials, and examples.https://developer.hashicorp.com/consul/install Consul的原理本文不做介绍,以下内容只涉及基础的命令使用。如果想要了解可以访问下面的链接。
Consul 入门教程-腾讯云开发者社区-腾讯云微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。这里我只是简单的提一下,毕竟这不是我们的重点。我们看下面的一幅图片:https://cloud.tencent.com/developer/article/1444664 以下命令需要在每个Consul_node中执行。
#下载安装包
wget https://releases.hashicorp.com/consul/1.19.2/consul_1.19.2_linux_amd64.zip
#安装解压软件
yum -y install unzip
#把压缩包中的内容解压到/usr/bin/目录中(压缩包里面只有consul有用)
unzip consul_1.19.2_linux_amd64.zip -d /usr/bin/
#防火墙放行,防火墙配置永久生效
firewall-cmd --add-port=8500/tcp
firewall-cmd --add-port=8301/tcp
firewall-cmd --add-port=8300/tcp
firewall-cmd --runtime-to-permanent
在Prometheus.ym文件中最后添加consul节点信息。
#ip修改为自己设备的ip
cat >> /opt/prometheus/promethues.yml << EOF
- job_name: "node_exporter_consul"
consul_sd_configs:
- server: 192.168.135.130:8500
- server: 192.168.135.120:8500
- server: 192.168.135.110:8500
relabel_configs:
- source_labels: [__meta_consul_service]
regex: consul
action: drop
EOF
在Consul_node(主)节点130中执行以下命令,再访问192.168.135.130:8500就可以看到如下页面。
nohup consul agent -server -bootstrap -bind=192.168.135.130 -data-dir=/consul -client=192.168.135.130 -ui &
通过以下命令让rhel1、rhel2加入到rhel3中形成集群。
#在192.168.135.110中执行以下命令
nohup consul agent -bind=192.168.135.110 -data-dir=/consul -client=192.168.135.110 -ui -retry-join=192.168.135.130 &
#在192.168.135.120中执行以下命令
nohup consul agent -bind=192.168.135.120 -data-dir=/consul -client=192.168.135.120 -ui -retry-join=192.168.135.130 &
可以在rhel3字样的下面看到Leader,代表rhel3为主节点。
再通过加以下命令,让debian加入到集群中的任意节点(本次我把debian注册到了rhel2中)。debian需要完成最基础的Node_expoter部署。
#防火墙放行配置永久生效
firewall-cmd --add-port=9100/tcp
firewalld-cmd --runtime-to-permanent
#下载node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
#解压node_exporter
tar xvf node_exporter-1.8.0.linux-amd64.tar.gz
#移动到/opt目录下
mv node_exporter-1.8.0.linux-amd64 /opt/node_exporter
#创建用户
useradd -M -s /usr/sbin/nologin prometheus
#设置文件所属人
chown prometheus:proemtheus -R /opt/node_exporter
#配置systemd启动服务
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/opt/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
EOF
#重新加载systemd
systemctl daemon-reload
#设置开机自启,同时启动服务
systemctl enable node_exporter --now
#查看服务状态
systemctl status node_exporter
#让centos2成为rhel2下的services
curl -X PUT -d '{"id":"debian","name":"debian","address":"192.168.135.100","port":9100,"tags":["node_exporter"],"checks": [{"http":"http://192.168.135.100:9100","interval":"5m"}]}' http://192.168.135.120:8500/v1/agent/service/register
完成上述操作后,就可以在Prometheus和Grafana中看到被监控的debian了。
在任意consul节点执行以下命令,也可以让rhel1的node_expoter注册到rhel2的services。
curl -X PUT -d '{"id":"rhel1","name":"rhel1","address":"192.168.135.110","port":9100,"tags":["node_exporter"],"checks": [{"http":"http://192.168.135.110:9100","interval":"5m"}]}' http://192.168.135.120:8500/v1/agent/service/register
遇到这种情况等待几分钟即可。
想要移除rhel1只需要在任意consul节点执行以下命令即可。需要注意是从哪个consul的节点移除services,不然会报错。
curl -X PUT http://192.168.135.120:8500/v1/agent/service/deregister/rhel1
Prometheus和Grafana还有consul的services中都没有rhel1的信息了。
小结
在本文中介绍了Prometheus+Grafana基础的二进制部署方式。通过文中所述的方式,可以在多种linux系统中完成部署。在文章的最后提到了集群监控的方式,部署每个监控服务器的环境时会比较比较繁琐,不过种繁琐内容完全可以使用如ansible等自动化工具完成。