Prometheus部署

1、简介

Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来),从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,并且于2015年早期对外发布早期版本。2016年5月继Kubernetes之后成为第二个正式加入CNCF基金会的项目,同年6月正式发布1.0版本。2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合。
Prometheus简史
Prometheus是一个开放性的监控解决方案,用户可以非常方便的安装和使用Prometheus并且能够非常方便的对其进行扩展。为了能够更加直观的了解Prometheus Server,接下来我们将在本地部署并运行一个Prometheus Server实例,通过Node Exporter采集当前主机的系统资源使用情况。 并通过Grafana创建一个简单的可视化仪表盘。

2、安装Prometheus

2.1 下载软件包并解压

对于非Docker用户,可以从https://prometheus.io/download/找到最新版本的Prometheus Sevrer软件包

1
2
curl -LO  https://github.com/prometheus/prometheus/releases/download/v2.38.0/prometheus-2.38.0.linux-amd64.tar.gz
tar -xvf prometheus-2.38.0.linux-amd64.tar.gz
2.2 配置软件

解压后当前目录会包含默认的Prometheus配置文件promethes.yml
Promtheus作为一个时间序列数据库,其采集的数据会以文件的形似存储在本地中,默认的存储路径为data/,因此我们需要先手动创建该目录:

1
mkdir -p data

添加prometheus到systemd

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /lib/systemd/system/prometheus.service

After=network.target ntpdate.service sntp.service ntpd.service chronyd.service

[Service]
KillMode=control-group
Restart=on-failure
RestartSec=60
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.console.templates=/opt/prometheus/consoles --web.console.libraries=/opt/prometheus/console_libraries --storage.tsdb.path=/opt/prometheus/data --log.level=info
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
2.3 启动Prometheus并设置为开机自启
1
2
systemctl start prometheus
systemctl enable prometheus

启动完成后,可以通过http://localhost:9090访问Prometheus的UI界面

3、使用Node Exporter采集主机运行数据

在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。
从上面的描述中可以看出Exporter可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向Prometheus提供标准格式的监控样本数据即可。

3.1 安装Node Exporter

Node Exporter同样采用Golang编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从https://prometheus.io/download/获取最新的node exporter版本的二进制包。

1
2
3
4
curl -OL https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar -xzf node_exporter-0.17.0.linux-amd64.tar.gz
cd node_exporter-0.17.0.linux-amd64/
mv node_exporter /usr/local/bin/

配置脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
cat >> /etc/rc.d/init.d/node_exporter <<EOF
#!/bin/bash
#
# /etc/rc.d/init.d/node_exporter
#
# Prometheus node exporter
#
# description: Prometheus node exporter
# processname: node_exporter

# Source function library.
. /etc/rc.d/init.d/functions

PROGNAME=node_exporter
PROG=/opt/prometheus/$PROGNAME
USER=root
LOGFILE=/var/log/prometheus.log
LOCKFILE=/var/run/$PROGNAME.pid

start() {
echo -n "Starting $PROGNAME: "
cd /opt/prometheus/
daemon --user $USER --pidfile="$LOCKFILE" "$PROG &>$LOGFILE &"
echo $(pidofproc $PROGNAME) >$LOCKFILE
echo
}

stop() {
echo -n "Shutting down $PROGNAME: "
killproc $PROGNAME
rm -f $LOCKFILE
echo
}


case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $PROGNAME
;;
restart)
stop
start
;;
reload)
echo "Sending SIGHUP to $PROGNAME"
kill -SIGHUP $(pidofproc $PROGNAME)#!/bin/bash
;;
*)
echo "Usage: service node_exporter {start|stop|status|reload|restart}"
exit 1
;;
esac
EOF

添加到systemd

1
2
3
4
5
6
7
8
9
10
11
12
vim /lib/systemd/system/node_exporter.service

After=network.target ntpdate.service sntp.service ntpd.service chronyd.service

[Service]
KillMode=control-group
Restart=on-failureRestartSec=60
ExecStart=/usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

运行node exporter

1
service node_exporter start 

启动成功后,查看端口

1
netstat -anplt|grep 9100 

访问http://localhost:9100/可以看到以下页面

3.2 添加node_exporter到Prometheus

为了能够让Prometheus Server能够从当前node exporter获取到监控数据,这里需要修改Prometheus配置文件。编辑prometheus.yml并在scrape_configs节点下添加以下内容:

1
2
3
4
5
6
7
8
9
10
vim /opt/prometheus/prometheus.yml

scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 采集node exporter监控数据
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']

重新启动Prometheus Server

1
systemctl restart prometheus

访问http://localhost:9090,进入到Prometheus Server。如果输入“up”并且点击执行按钮以后,可以看到如下结果

如果Prometheus能够正常从node exporter获取数据,则会看到以下结果

1
2
up{instance="localhost:9090",job="prometheus"}    1
up{instance="localhost:9100",job="node"} 1

其中“1”表示正常,反之“0”则为异常。

4、监控数据可视化

Prometheus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。

4.1 安装Grafana

添加Grafana源

1
2
3
4
5
6
7
8
9
10
[root@server ~]# vim /etc/yum.repos.d/grafana.repo 
[grafana]
name=grafana
baseurl=https://packages.grafana.com/enterprise/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

更新缓存

1
yum makecache

安装Grafana

1
yum install grafana-enterprise

编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
vim /etc/sysconfig/grafana-server

GRAFANA_USER=grafana

GRAFANA_GROUP=grafana

GRAFANA_HOME=/usr/share/grafana

LOG_DIR=/var/log/grafana

DATA_DIR=/var/lib/grafana

MAX_OPEN_FILES=10000

CONF_DIR=/etc/grafana

CONF_FILE=/etc/grafana/grafana.ini

RESTART_ON_UPGRADE=true

PLUGINS_DIR=/var/lib/grafana/plugins

PROVISIONING_CFG_DIR=/etc/grafana/provisioning

# Only used on systemd systems
PID_FILE_DIR=/var/run/grafana

启动Grafana并设置为开机自启动

1
2
systemctl start grafana-server
systemctl enable grafana-server

添加数据源
访问http://localhost:3000,进入到Grafana Server






grafana的官方提供了很多社区或者官方设置的漂亮的dashboard,地址如下:
点击打开链接





5、告警处理

5.1 部署Alertmanager

Alertmanager和Prometheus Server一样均采用Golang实现,并且没有第三方依赖。
使用二进制包部署AlertManager

5.1.1 获取并安装软件包

Alertmanager最新版本的下载地址可以从Prometheus官方网站https://prometheus.io/download/获取。

1
2
curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
tar xvf alertmanager-0.24.0.linux-amd64.tar.gz
5.1.2 创建alertmanager配置文件

Alertmanager解压后会包含一个默认的alertmanager.yml配置文件,内容如下所示···

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
global:
resolve_timeout: 5m

route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
5.1.3 添加Altermanager到systemd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vim /lib/systemd/system/altermanager.service

[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager.yml --storage.path=/opt/alertmanager/data
Restart=on-failure

[Install]
WantedBy=multi-user.target
5.1.4 启动altermanager并配置开机自启动
1
2
systemctl start altermanager
systemctl enable altermanager

Alertmanager启动后可以通过9093端口访问,http://192.168.33.10:9093

5.2 添加altermanager到Prometheus

在Prometheus的架构中被划分成两个独立的部分。Prometheus负责产生告警,而Alertmanager负责告警产生后的后续处理。因此Alertmanager部署完成后,需要在Prometheus中设置Alertmanager相关的信息。
编辑Prometheus配置文件prometheus.yml,并添加以下内容

1
2
3
4
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']

重启Prometheus服务。

5.3 添加altermanager到Grafana





导入dashboard





Prometheus部署
https://www.zhoumx.net/Prometheus部署.html
作者
阿星
发布于
2022年8月30日
许可协议