Prometheus监控系统部署方案
Prometheus监控系统部署方案
1 Prometheus简介
Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发者和用户社区。它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了强调这一点,并阐明项目的治理结构,Prometheus于2016年加入Cloud Native Computing Foundation,作为继Kubernetes之后的第二个托管项目。
2 特性
- 多维度数据模型-由指标键值对标识的时间序列数据组成
- PromQL,一种灵活的查询语言
- 不依赖分布式存储;单个服务器节点是自治的
- 以HTTP方式,通过pull模型拉取时间序列数据
- 支持通过中间网关推送时间序列数据
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示
3 组件
- Prometheus Server:用于收集和存储时间序列数据
- Client Library:客户端库,为需要监控的服务生成相应的metrics并暴露给Prometheus server。当 Prometheus server来pull时,直接返回实时状态的metrics
- Exporters:用于暴露已有的第三方服务的metrics给Prometheus
- Alertmanager:从Prometheus server端接收到alerts后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件、pagerduty、OpsGenie、webhook等
- Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等
4 适用场景
Prometheus适用于记录任何纯数字时间序列。它适用于以机器为中心的监控以及高度动态的面向服务架构的监控。在微服务的世界中,Prometheus的多维度数据收集和查询非常强大。
Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。每个Prometheus服务器都是独立的,不依赖于网络存储或其他远程服务。当基础架构的其他部分损坏时,您可以依赖它,并且您不需要设置大量的基础架构来使用它。
5 目标
Google指出,监控分为白盒监控和黑盒监控之分。
白盒监控:通过监控内部的运行状态及指标判断可能会发生的问题,从而做出预判或对其进行优化。
黑盒监控:监控系统或服务,在发生异常时做出相应措施。
Prometheus监控的目标如下:
- 根据历史监控数据,对未来做出预测
- 发生异常时,及时报警,或做出相应措施
- 根据监控报警及时定位问题根源
- 通过可视化图表展示,便于直观获取信息
6 部署过程
本次部署一台Server。服务器最低配置要求8G内存,40G硬盘。服务器IP 192.168.4.150。
6.1 关闭SELinux
SeLinux不关闭会发生无法访问的情况。
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
6.2 关闭防火墙
防止安装时出现各个组件的端口不能访问的问题。
[root@localhost ~]#systemctl stop firewalld && systemctl disable firewalld
6.3 下载安装包
[root@localhost~]#wget\ https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz
[root@localhost~]#wget\ https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz
[root@localhost~]#wget \
https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
6.4 配置Prometheus Server
解压Prometheus压缩包,并配置Prometheus配置文件。
[root@localhost ~]# mkdir /root/monitor
[root@localhost ~]# tar -xvf prometheus-2.16.0.linux-amd64.tar.gz -C /root/monitor
[root@localhost ~]# mv prometheus-2.16.0.linux-amd64 prometheus
[root@localhost ~]# vi /home/monitor/prometheus/prometheus.yml
global:
scrape_interval: 30s
evaluation_interval: 30s
scrape_timeout: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.4.150:9093
rule_files:
- /root/monitor/prometheus/rule/*.rules
scrape_configs:
- job_name: 'node'
file_sd_configs:
- refresh_interval: 1m
files:
- node.json
[root@localhost ~]# vi /root/monitor/prometheus/node.json
[
{
"targets": [ "192.168.5.135:9100"],
"labels": {
"grafana": "prometheus",
"tera": "exporter",
"job": "node"
}
}
]
6.5 System配置Prometheus
使用System配置Prometheus实现服务自启。
[root@localhost ~]# vi /usr/lib/systemd/system/prometheus.service
[Unit]
After=docker.service
[Service]
ExecStart=/root/monitor/prometheus/prometheus \
--config.file=/root/monitor/prometheus/prometheus.yml \
--storage.tsdb.path=/root/monitor/prometheus/data/ --web.external-url=http://:9090
Restart=always
[Install]
WantedBy=multi-user.target
6.6 配置Alertmanager
解压Alertmanaget安装包,Alertmanager接收Prometheus监控信息并将告警信息通过邮件发送到接收人。
[root@localhost ~]# tar -xvf alertmanager-0.20.0.linux-amd64.tar.gz -C /root/monitor
[root@localhost ~]# mv alertmanager-0.20.0.linux-amd64.tar.gz alertmanager
[root@localhost ~]# vi /home/monitor/alertmanager/alertmanager.yml
global:
resolve_timeout: 10m
smtp_smarthost: ''
smtp_from: 'email'
smtp_auth_username: 'email'
smtp_auth_password: 'password'
smtp_hello: 'Hello'
smtp_require_tls: false
templates:
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 1m
repeat_interval: 360m
receiver: asterfusion
receivers:
- name: asterfusion
email_configs:
- to: '接收人1'
send_resolved: true Restart=always
[Install]
WantedBy=multi-user.target
6.7 System配置Alertmanager
使用System配置Alertmanager实现服务自启。
[root@localhost ~]#vi /usr/lib/systemd/system/alertmanager.service
[Unit]想·
After=docker.service
[Service]
ExecStart=/root/monitor/alertmanager/alertmanager --web.listen-address=192.168.4.150:9093\
--config.file=/root/monitor/alertmanager/alertmanager.yml\
--storage.path=/root/monitor/alertmanager
Restart=always
[Install]
WantedBy=multi-user.target
6.8 部署Granfana
[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-6.7.1-1.x86_64.rpm
[root@localhost ~]# yum -y install grafana-6.7.1-1.x86_64.rpm
6.9 部署Node_exporter
部署Node_exporter采集服务器资源信息。
[root@localhost ~]# tar -xvf node_exporter-0.18.1.linux-amd64.tar.gz -C /root/monitor
[root@localhost ~]# mv node_exporter-0.18.1.linux-amd64.tar.gz node_exporter
6.10 System配置Node_exporter
使用Sysytem管理Node_exporter实现服务自启。
[root@localhost ~]#vi /usr/lib/systemd/system/node.service
[Unit]
After=docker.service
[Service]
ExecStart=/root/monitor/node_exporter/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
6.11 添加监控主机
在Prometheus文件夹下创建node.json文件,添加需要监控的主机列表。
[root@localhost ~]# vi /root/monitor/prometheus/node.json
[
{
"targets": [ "192.168.4.150:9100"],
"labels": {
"grafana": "controller",
"tera": "exporter",
"job": "node"
}
},
]
6.12 添加报警
在Prometheus的rule文件夹下定义报警规则,满足条件则把信息推送到Alertmanager。
[root@localhost ~]# mkdir /root/monitor/prometheus/rule
[root@localhost ~]# vi /root/monitor/prometheus/rule/node.rules
groups:
- name: nodedown
rules:
- alert: nodeDown
expr: up{tera="exporter"} == 0
for: 1m
labels:
severity: serious
annotations:
summary: "Instance {{ $labels.instance }} node is Down"
description: "{{ $labels.instance }} node is Down"
6.13 启动服务
Prometheus监控所有组件都是用System管理。
[root@localhost ~]# systemctl start prometheus.service && systemctl enable prometheus.service
[root@localhost ~]# systemctl start node.service && systemctl enable node.service
[root@localhost ~]# systemctl start alertmanager && systemctl enable alertmanager
[root@localhost ~]# systemctl start grafana-server && systemctl enable grafana-server
6.14 监控Web
Prometheus Web URL: http://192.168.4.150:9090。
Alertmanager Web URL: http://192.168.4.150:9093。
Node_exporter Web URL: http://192.168.4.150:9100。
Grafana Web URL : http://192.168.4.150:3000。
7 参考资料
- Prometheus官网:https://prometheus.io/
- Grafana官网:https://grafana.com/
如有其它问题,请填写右侧需求表单联系我们。