一、Prometheus概述

Prometheus是一个开源的系统监视和警报工具包,自2012成立以来,许多公司和组织采用了Prometheus。它现在是一个独立的开源项目,并独立于任何公司维护。
在2016年,Prometheus加入云计算基金会作为Kubernetes之后的第二托管项目。

特点:

  • 多维数据模型(有metric名称和键值对确定的时间序列)
  • 灵活的查询语言
  • 不依赖分布式存储
  • 通过pull方式采集时间序列,通过http协议传输
  • 支持通过中介网关的push时间序列的方式
  • 监控数据通过服务或者静态配置来发现
  • 支持图表和dashboard等多种方式

组件:

  • Prometheus 主程序,主要是负责存储、抓取、聚合、查询方面。
  • Alertmanager 程序,主要是负责实现报警功能。
  • Pushgateway 程序,主要是实现接收由Client push过来的指标数据,在指定的时间间隔,由主程序来抓取。
  • node_exporter 这类是不同系统已经实现了的集成。

架构图

工作流程

  • Prometheus 服务器定期从配置好的 jobs 或者 exporters 中获取度量数据;或者接收来自推送网关发送过来的 度量数据。
  • Prometheus 服务器在本地存储收集到的度量数据,并对这些数据进行聚合;
  • 运行已定义好的 alert.rules,记录新的时间序列或者向告警管理器推送警报。
  • 告警管理器根据配置文件,对接收到的警报进行处理,并通过email等途径发出告警。
  • Grafana等图形工具获取到监控数据,并以图形化的方式进行展示。

二、Prometheus安装及配置

1、下载及解压安装包

wget https://github.com/prometheus/prometheus/releases/download/v2.5.0/prometheus-2.5.0.linux-amd64.tar.gzgroupadd prometheus
useradd -g prometheus prometheus -d /app/prometheustar -xvf prometheus-2.5.0.linux-amd64.tar.gz
cd prometheus-2.5.0.linux-amd64/
mv * /app/prometheus/cd /app/prometheus/
mkdir {data,cfg,logs,bin} -p
mv prometheus promtool bin/
mv prometheus.yml cfg/chown -R prometheus.prometheus *

2 、设置环境变量

vim /etc/profile
PATH=/app/prometheus/bin:$PATH:$HOME/bin
source /etc/profile

3、检查配置文件

# promtool check config /app/prometheus/config/prometheus.yml
Checking /app/prometheus/config/prometheus.ymlSUCCESS: 0 rule files found

4、创建prometheus.service 的 systemd unit 文件

vim /etc/systemd/system/prometheus.service[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
User=prometheus
ExecStart=/app/prometheus/bin/prometheus --config.file=/app/prometheus/cfg/prometheus.yml --storage.tsdb.path=/app/prometheus/data
Restart=on-failure[Install]
WantedBy=multi-user.target

5、启动服务

systemctl daemon-reload
systemctl enable prometheus.service
systemctl start prometheus.service

6、运行状态

# systemctl status prometheus.service
● prometheus.service - PrometheusLoaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: disabled)Active: active (running) since 日 2018-12-09 22:21:52 CST; 4min 59s agoDocs: https://prometheus.io/Main PID: 1308 (prometheus)CGroup: /system.slice/prometheus.service└─1308 /app/prometheus/bin/prometheus --config.file=/app/prometheus/cfg/prometheus.yml --storage.tsdb.path=/app/prometheus/data12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.190312051Z caller=main.go:245 build_context="(go=go1.11.1, user=root@578ab108d0b9, date=20...-11:40:44)"
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.190327105Z caller=main.go:246 host_details="(Linux 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20...us (none))"
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.190342191Z caller=main.go:247 fd_limits="(soft=1024, hard=4096)"
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.190351846Z caller=main.go:248 vm_limits="(soft=unlimited, hard=unlimited)"
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.192559162Z caller=main.go:562 msg="Starting TSDB ..."
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.204059097Z caller=main.go:572 msg="TSDB started"
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.204101343Z caller=main.go:632 msg="Loading configuration file" filename=/app/prometheus/cf...metheus.yml
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.204905309Z caller=main.go:658 msg="Completed loading of configuration file" filename=/app/...metheus.yml
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.204919014Z caller=main.go:531 msg="Server is ready to receive web requests."
12月 09 22:21:52 qas-prometheus prometheus[1308]: level=info ts=2018-12-09T14:21:52.20493548Z caller=web.go:399 component=web msg="Start listening for connections" address=0.0.0.0:9090
Hint: Some lines were ellipsized, use -l to show in full.
Prometheus自带有简单的UI,http://172.16.8.253:9090/

三、node_exporter安装及配置

1、下载及解压安装包

wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar -xvf node_exporter-0.17.0.linux-amd64.tar.gz -C /app/prometheus/
cd  /app/prometheus/
mv node_exporter-0.17.0.linux-amd64 node_exporter

2、创建用户

groupadd prometheus
useradd -g prometheus prometheus -d /app/prometheus
chown -R prometheus.prometheus node_exporter

3、创建node_exporter.service的 systemd unit 文件

# vim /usr/lib/systemd/system/node_exporter.service[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
User=prometheus
ExecStart=/app/prometheus/node_exporter/node_exporter
Restart=on-failure[Install]
WantedBy=multi-user.target

4、启动服务

systemctl daemon-reload
systemctl enable node_exporter.service
systemctl start node_exporter.service

5、运行状态

]# systemctl status node_exporter.service
● node_exporter.service - node_exporterLoaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled)Active: active (running) since 日 2018-12-09 22:45:10 CST; 4min 8s agoDocs: https://prometheus.io/Main PID: 1515 (node_exporter)CGroup: /system.slice/node_exporter.service└─1515 /app/prometheus/node_exporter/node_exporter12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - sockstat" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - stat" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - textfile" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - time" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - timex" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - uname" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - vmstat" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - xfs" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg=" - zfs" source="node_exporter.go:97"
12月 09 22:45:10 qas-prometheus node_exporter[1515]: time="2018-12-09T22:45:10+08:00" level=info msg="Listening on :9100" source="node_exporter.go:111"

6、客户监控端数据汇报

访问:http://172.16.8.253:9100/metrics,查看从exporter具体能抓到的数据.如下:

四、Grafana安装及配置

1、下载及安装

wget https://dl.grafana.com/oss/release/grafana-5.4.0-1.x86_64.rpm
yum localinstall grafana-5.4.0-1.x86_64.rpm 

2、启动服务

systemctl daemon-reload
systemctl enable grafana-server.service
systemctl start grafana-server.service

3、访问WEB界面

默认账号/密码:admin/admin
http://172.16.9.253:3000

4、Grafana添加数据源

在登陆首页,点击"Configuration-Data Sources"按钮,跳转到添加数据源页面,配置如下:
Name: prometheus
Type: prometheus
URL: http://172.16.9.253:9090/
Access: Server
取消Default的勾选,其余默认,点击"Add",如下:


在"Dashboards"页签下"import"自带的模版,如下:

五、Alertmanager安装配置

tar -xvf alertmanager-0.15.3.linux-amd64.tar.gz -C /app/prometheus/
cd /app/prometheus/
mv alertmanager-0.15.3.linux-amd64 alertmanager
cd alertmanager/
mkdir {bin,cfg,data}
mv alertmanager amtool bin/
mv alertmanager.yml cfg/
chown -R prometheus.prometheus *

创建node_exporter.service的 systemd unit 文件

# vim /usr/lib/systemd/system/alertmanager.service[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
User=prometheus
ExecStart=/app/prometheus/alertmanager/bin/alertmanager \
--config.file=/app/prometheus/alertmanager/cfg/alertmanager.yml \
--web.listen-address=172.16.9.201:9093 \
--cluster.listen-address=0.0.0.0:8001 \
--storage.path=/app/prometheus/alertmanager/data \
--log.level=info
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target

启动服务

systemctl daemon-reload
systemctl enable alertmanager.service
systemctl start alertmanager.service 

查看运行日志

# tail -f /var/log/messages
Dec 11 10:51:11 prometheus-node2 systemd: Stopping alertmanager...
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.118658711Z caller=main.go:426 msg="Received SIGTERM, exiting gracefully..."
Dec 11 10:51:11 prometheus-node2 systemd: Started alertmanager.
Dec 11 10:51:11 prometheus-node2 systemd: Starting alertmanager...
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.156033311Z caller=main.go:174 msg="Starting Alertmanager" version="(version=0.15.3, branch=HEAD, revision=d4a7697cc90f8bce62efe7c44b63b542578ec0a1)"
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.156186095Z caller=main.go:175 build_context="(go=go1.11.2, user=root@4ecc17c53d26, date=20181109-15:40:48)"
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.179081721Z caller=cluster.go:155 component=cluster msg="setting advertise address explicitly" addr=172.16.9.202 port=8001
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.182933235Z caller=main.go:322 msg="Loading configuration file" file=/app/prometheus/alertmanager/cfg/alertmanager.yml
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.1953798Z caller=main.go:398 msg=Listening address=172.16.9.202:9093
Dec 11 10:51:11 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:11.203980995Z caller=cluster.go:570 component=cluster msg="Waiting for gossip to settle..." interval=2s
Dec 11 10:51:13 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:13.205051348Z caller=cluster.go:595 component=cluster msg="gossip not settled" polls=0 before=0 now=1 elapsed=2.000725532s
Dec 11 10:51:21 prometheus-node2 alertmanager: level=info ts=2018-12-11T02:51:21.208105947Z caller=cluster.go:587 component=cluster msg="gossip settled; proceeding" elapsed=10.003795489s

配置邮件告警

vim alertmanager.yml
global:resolve_timeout: 5msmtp_smarthost: 'smtp.163.com:25' # 邮箱smtp服务器代理smtp_from: 'xxxxxxx@163.com' # 发送邮箱名称smtp_auth_username: 'xxxxxx@163.com' # 邮箱名称smtp_auth_password: 'xxxxx' # 邮箱密码或授权码smtp_require_tls: false
route:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'mail'
receivers:
- name: 'mail'email_configs:- to: 'xxxxxxxx@qq.com'
### rules配置告警规则
```
vim qas.yml
groups:
- name: 主机状态-监控告警rules:- alert: 主机状态expr: up == 0for: 1mlabels:status: 非常严重annotations:summary: "{{$labels.instance}}:服务器宕机"description: "{{$labels.instance}}:服务器延时超过5分钟"- alert: CPU使用情况expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 60for: 1mlabels:status: 一般告警annotations:summary: "{{$labels.mountpoint}} CPU使用率过高!"description: "{{$labels.mountpoint }} CPU使用大于60%(目前使用:{{$value}}%)"- alert: 内存使用expr: 100 -(node_memory_MemTotal_bytes -node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes ) / node_memory_MemTotal_bytes * 100> 80for: 1mlabels:status: 严重告警annotations:summary: "{{$labels.mountpoint}} 内存使用率过高!"description: "{{$labels.mountpoint }} 内存使用大于80%(目前使用:{{$value}}%)"- alert: IO性能expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60for: 1mlabels:status: 严重告警annotations:summary: "{{$labels.mountpoint}} 流入磁盘IO使用率过高!"description: "{{$labels.mountpoint }} 流入磁盘IO大于60%(目前使用:{{$value}})"- alert: 网络expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400for: 1mlabels:status: 严重告警annotations:summary: "{{$labels.mountpoint}} 流入网络带宽过高!"description: "{{$labels.mountpoint }}流入网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"- alert: 网络expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400for: 1mlabels:status: 严重告警annotations:summary: "{{$labels.mountpoint}} 流出网络带宽过高!"description: "{{$labels.mountpoint }}流出网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"- alert: TCP会话expr: node_netstat_Tcp_CurrEstab > 1000for: 1mlabels:status: 严重告警annotations:summary: "{{$labels.mountpoint}} TCP_ESTABLISHED过高!"description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"- alert: 磁盘容量expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80for: 1mlabels:status: 严重告警annotations:summary: "{{$labels.mountpoint}} 磁盘分区使用率过高!"description: "{{$labels.mountpoint }} 磁盘分区使用大于80%(目前使用:{{$value}}%)"
![](https://s1.51cto.com/images/blog/201906/12/40ef2698ad7ba396dd77678e3e58cbbf.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)### 已经收到邮件内容告警![](https://s1.51cto.com/images/blog/201906/12/201c5fe81bdd31ad4277788cb3847b94.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

转载于:https://blog.51cto.com/10880347/2328092

CentOS7.5 Prometheus2.5+Grafana5.4监控部署相关推荐

  1. zabbix 监控部署(下)

    在之前的zabbix 监控部署(上) 这篇博客中,主要是使用了源码编译安装的方式,在实际的生产中,如果没有特殊要求,也可以直接使用yum 安装.这篇博文主要是使用yum方式通过salt安装的一个简单示 ...

  2. Zabbix的分布式监控部署

    Zabbix的分布式监控部署 一.Zabbix的分布式监控拓扑 二.Zabbix proxy 介绍 三.部署分布式Zabbix proxy 1.环境准备 2.安装Zabbix proxy和数据库及相关 ...

  3. K8S精华问答 | 如何监控部署在Docker容器上的应用程序?

    kubernetes,简称K8S,是用8代替8个字符"ubernete"而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化 ...

  4. cactiez v11使用配置mysql_cactiez应用监控部署手册.doc

    cactiez应用监控部署手册 cactiez应用监控部署手册 导读:就爱阅读网友为您分享以下"cactiez应用监控部署手册"的资讯,希望对您有所帮助,感谢您对92的支持! 5. ...

  5. Ceph监控部署之inkscopeCalamari(v10.2.11)

    Ceph监控部署之inkscope & calamari 一.Ceph监控系统之inkscope部署 inkcope组件说明 inkscope部署 二.Ceph监控之Calamari部署 Ca ...

  6. 记一次 Centos7.x Hadoop3.x集群安装部署 Pig 0.17.0

    基本信息 官网 http://pig.apache.org/ 下载地址 http://www.apache.org/dyn/closer.cgi/pig https://mirror.bit.edu. ...

  7. 分布式监控部署之Ganglia

    Ganglia分布式监控部署 1.Ganglia介绍 2.Ganglia安装和配置 3.修改相应的配置文件 4.结果展示 5.权限问题解决方法 一.介绍 Ganglia是由UC Berkeley发起的 ...

  8. 体验监控宝免费网站服务器监控服务 附注册账户及网站监控部署方法

    无论是我们个人网站还是公司企业专业运维人员,对于公司服务器.网站等项目肯定不能全天24小时的在线人工监控和管理,尤其是在众多项目部署的时候,我们根本顾及不过来所有项目网站.服务器的稳定性.比如经常有遇 ...

  9. CentOS7.5下搭建zabbix3.4监控

    zabbix中文官方文档地址: https://www.zabbix.com/documentation/3.4/zh/manual 大纲 一.zabbix简介 二 .环境准备 三 .安装数据库 四 ...

最新文章

  1. Java——我的概念
  2. 意念控制成现实:不开口,不动手,“瘫着”就能打游戏
  3. python version 3.4 required_Python version 3.3 required, which was not found in the registry
  4. 互联网文本内容安全:腾讯云天御AI对抗实践
  5. SQL Server中把查询出来的结果重新编号作为一列
  6. 柿子不能和什么食物一起吃
  7. 进程VS线程---操作类型
  8. bzoj 3611: [Heoi2014]大工程(虚树+树形DP)
  9. LED灯随机亮起几个灯
  10. iPhone 开源游戏引擎
  11. 计算机打不开硬盘,硬盘打不开的原因和解决方法
  12. 2021年UI设计培训面试问题及答案解析
  13. Vue+Element动态生成新表单并添加验证
  14. 2022Android春招面试,实战分析
  15. 【Web接口测试_基础概念】接口概念、接口分类、接口定义、接口规范、接口方法、接口用例设计整理
  16. koa-redis + ioredis
  17. 安装 office 2016
  18. MotoSim EG-VRC软件:机器人系统创建与模型布局操作
  19. Android Q读写共享目录媒体文件
  20. excel多表格数据汇总如何实现

热门文章

  1. 【Unity入门】25.零基础实现游戏Demo--神鸟大战怪兽
  2. 连接虚拟服务器是什么意思,虚拟主机(服务器)iis连接数是什么意思?超过最大链接...
  3. ArcGIS Pro系列教程之登陆及离线授权
  4. 每公里配速9分18秒,双足机器人完成5公里慢跑
  5. 团贷网Android客户端架构演进之路(上)
  6. 【STM8S】STM8S之定时器1的精确延时
  7. C语言.csv编程应用
  8. Javassist 使用指南
  9. 284work 周末加班
  10. 为什么要考一级建造师,一建证书含金量有多高?