在之前的网站uptime监控中提到过Prometheus+Grafana监控搭配,抽空自己部署了一遍,功能强大,达到了运维级。
Prometheus是主控程序,是监控的Server端。
Node exporter是client端,部署在被监控vps上,负责向Prometheus传输数据。
Grafana是开源的看板/面板程序,提供可视化图形界面。
三者相结合,提供了一套完整的运维级监控系统。如果需要监控警报,还需要加入Alertmanager。
Prometheus、Node exporter、Altermanager开源地址:
https://github.com/prometheus
Grafana开源地址:https://github.com/grafana/grafana
下面记录下部署过程。
1、docker部署Prometheus
选择用docker部署,简单方便。注意映射9090端口,及prometheus.yml配置文件目录。我这里以/opt/config目录为例:
-v /opt/config:/etc/prometheus
将宿主机/opt/config目录,挂载到docker的/etc/prometheus目录。
如果是二进制安装,步骤为:
tar zxf prometheus-2.25.0.linux-amd64.tar.gz -C /opt
mv /opt/prometheus-2.25.0.linux-amd64 /opt/prometheus
vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus service
[Service]
User=root
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
每次更改了Prometheus配置文件,都需要重启:
systemctl restart prometheus
2、配置prometheus.yml文件
以下为最简单的默认配置文件
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
labels:
instance: prometheus
添加配置文件之后,docker程序才能正常启动。
此时访问http://ip:9090端口,访问Prometheus控制界面。目前界面很简陋,所以需要继续部署grafana。
3、部署Grafana面板程序
以debian为例:
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
添加源:
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
安装grafana:
sudo apt-get update
sudo apt-get install grafana
启动Grafana:
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server
配置随机启动:
sudo systemctl enable grafana-server.service
浏览器访问IP:3000端口,即可打开grafana页面,默认用户名密码都是admin,初次登录会要求修改默认的登录密码。
4、为Grafana添加Prometheus数据源
点击主界面的“Add your first data source”并选择Prometheus,import,保存即可。
当然你还可以添加更多目标,看到更多详细的数据,Grafana官方也提供了很多dashboard的模板:
https://grafana.com/grafana/dashboards/
推荐排名第一的Node Exporter Full。安装模板也很简单,直接复制模板ID(Copy ID to clipboard)
Grafana后台 – Dashboards – Browse – New – Import – 粘贴ID – Load – 并选择数据源为Prometheus。搞定
5、部署Node exporter
在需要被监控的vps上部署node exporter,当然也可以在Prometheus所在vps上部署,监控本机。
选择下载对应版本并解压:
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz
mv /root/node_exporter-1.5.0.linux-amd64 /opt/node_exporter
配置开机启动:
vi /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter service
[Service]
User=root
ExecStart=/opt/node_exporter/node_exporter
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
如果报错,也可以 vi /etc/systemd/system/node_exporter.service
关于Linux service配置文件的说明,请参考:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/150.html
systemctl daemon-reload
systemctl enable node_exporter
启动服务:
systemctl start node_exporter
systemctl status node_exporter
node exporter默认监控端口是9100,访问ip:9100可以查看node exporter。
注意:在vps面板防火墙中放行9100端口,同时如果vps安装了宝塔等程序,也需要在”安全“中放行9100端口。
iptables也要放行9100:
iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 9100 -j ACCEPT
6、Node exporter与Prometheus建立连接,传送数据。
编辑Prometheus的prometheus.yml文件,添加以下代码,注意对齐:
- job_name: 'Linux'
static_configs:
- targets: ['xx.xx.xx.xx:9100']
labels:
instance: 168itw.com
重启docker Prometheus。
继续阅读