Prometheus+Grafana企业级监控系统学习笔记

Prometheus 概述

Prometheus简介

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。
Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。	
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据)相比功能更完善、更全面。
Prometheus性能也足够支撑上万台规模的集群。

https://prometheus.io
https://github.com/prometheus

系统架构图

在这里插入图片描述

基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

其大概的工作流程是:

Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
在Grafana图形界面中,可视化查看采集数据。

Prometheus的特性

Prometheus 特点:
• 多维数据模型:由度量名称和键值对标识的时间序列数据
• PromQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
• 不依赖分布式存储,单个服务器节点可直接工作
• 基于HTTP的pull方式采集时间序列数据
• 推送时间序列数据通过PushGateway组件支持
• 通过服务发现或静态配置发现目标
• 多种图形模式及仪表盘支持(grafana)

Prometheus的组件

Prometheus Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
ClientLibrary 客户端库
Alertmanager 警告管理器,用来进行报警。
Push Gateway 短期存储指标数据。主要用于临时性的任务
Exporters 输出被监控组件信息的HTTP接口,采集已有的第三方服务监控指标并暴露metrics
Grafana 监控数据展示Web UI。

服务发现

Prometheus部署与配置文件

Prometheus部署

访问地址:
http://IP:9090

在这里插入图片描述

./premetheus -h 命令行常用参数:
• --config.file="prometheus.yml" 	#指定配置文件
• --web.listen-address= "0.0.0.0:9090" #监听地址和端口
• --log.level=info 	#日志级别
• --alertmanager.timeout=10s #与报警组件的超时时间
• --storage.tsdb.path="data/ " 	#数据目录
• --storage.tsdb.retention.time=15d # 数据保存时间,默认15天

• 二进制部署
https://prometheus.io/docs/prometheus/latest/getting_started/

在这里插入图片描述

二进制启动配置为系统服务管理

配置为系统服务管理
vi /usr/lib/systemd/system/prometheus.service

[Unit]
Description=prometheus

[Service]
ExecStart=/opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus


• Docker部署	
https://prometheus.io/docs/prometheus/latest/installation/

错误的docker命令

docker run -d \
--name=prometheus \
-p 9090:9090 \
-v $PWD/prometheus.yml:/data/prometheus/prometheus.yml \
prom/prometheus
	
指定name中间不要等,看了半天才发现。也是醉了

正确的dockcer命令

docker run -d \
--name prometheus \
-p 9090:9090 \
-v $PWD/prometheus.yml:/data/prometheus/prometheus.yml \
prom/prometheus

$PWD可以写绝对路径

在这里插入图片描述

Prometheus配置文件

在这里插入图片描述

在这里插入图片描述

监控案例

如何监控服务?

1.自己写metrics接口,遵循数据模型

先知道怎么收集你要监控指标
集成官方的客户端或者自己数据格式,暴露出来。

2.使用社区维护的exporter(采集器,以数据模型暴露metrics接口)
在这里插入图片描述

部署Grafana对数据可视化

Grafana是一个开源的度量分析和可视化系统。

部署文档:
https://grafana.com/grafana/download

访问地址:
http://IP:3000

用户名/密码:admin/admin

在这里插入图片描述
wget方式下载二进制包太慢,可以直接在浏览器上输入下载地址,翻墙下载。会快很多…

配置为系统服务管理:
vi /usr/lib/systemd/system/grafana.service

[Unit]
Description=grafana

[Service]
ExecStart=/opt/monitor/grafana/bin/grafana-server -homepath=/opt/monitor/grafana

ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start grafana
systemctl enable grafana

在这里插入图片描述

第一次需要重置密码

监控Linux服务器

node_exporter:用于监控Linux系统的指标采集器。
常用指标:
• CPU
• 内存
• 硬盘
• 网络流量
• 文件描述符
• 系统负载
• 系统服务

数据接口:
http://IP:9100

使用文档:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter

在这里插入图片描述

https://prometheus.io/docs/instrumenting/exporters

node_exporter配置为系统服务管理systemd

配置为系统服务管理:
vi /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=node_exporter

[Service]
ExecStart=/usr/local/node_exporter/node_exporter -web.config=/usr/local/node_exporter/config.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter

访问地址:

http://192.168.220.102:9100/metrics

配置prometheus.yml文件

在这里插入图片描述
检查配置是否正确

./promtool check config ./prometheus.yml

在这里插入图片描述

热加载配置文件

在这里插入图片描述

在这里插入图片描述
grafana监控

加入仪表盘

在这里插入图片描述
推荐id 9276
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
加第二台服务器
在这里插入图片描述

暴露的指标接口启用HTTP认证

启用HTTP认证:

vi config.yml

basic_auth_users:
prometheus: $2y$12$RC4HOCkmmupzZfgdL56XUu0zZ1sdEV be3J4NS17nybLFt54hzWO7G

#用户名: 密码
上面密码用下面命令生成:
yum install httpd-tools –y
htpasswd -nBC 12 '' | tr -d ':\n'

在指定目录创建config.yml文件,并重启exporter
在这里插入图片描述
浏览器basic认证
在这里插入图片描述

prometheus server 配置exporters的username和password
在这里插入图片描述
验证配置文件是否配置正确,可以热加载配置,也可以重启prometheus服务
在这里插入图片描述

监控系统服务运行状态

到exporter服务器上的指定路径上加入如下配置,并重启node_exporter服务:

/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/config.yml -collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service

在这里插入图片描述
加入配置后执行如下命令重启node_exporter

systemctl daemon-reload
systemctl start node_exporter

在这里插入图片描述

监控Docker服务器

cAdvisor (Container Advisor) :用于收集正在运行的容器资源使用和性能信息。

项目地址:https://github.com/google/cadvisor
Docker部署cAdvisor:
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

在这里插入图片描述

访问地址

http://192.168.220.103:8080/containers/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

再运行一个容器看看能不能采集到

在这里插入图片描述
等待一会

在这里插入图片描述
这个只能展示一台服务器上的docker运行情况

在Prometheus server上加上另外一台服务器的ip,并在另外一台服务器上也启动一个容器

在这里插入图片描述
修改配置文件,后面会加到如何实现配置的热加载。
在这里插入图片描述
创建一个Dashboard
在这里插入图片描述

在这里插入图片描述

label_values(up,instance)
选出处于up状态的服务

在这里插入图片描述

点击update
在这里插入图片描述

点击Save
在这里插入图片描述
服务过多,筛选掉没有Docker服务的服务
在这里插入图片描述
加入正则表达式

.*:8080

在这里插入图片描述

如图筛选出了有Docker服务的服务器
在这里插入图片描述

上面显示的是所有服务器的容器的状态,调节显示每台服务器容器的状态
在这里插入图片描述

监控MySQL服务器

mysql_exporter:用于收集MySQL性能信息。监听端口:9104
项目地址:https://github.com/prometheus/mysqld_exporter

#docker run -d --name db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#docker exec -it db bash

mysql -uroot -p123456
mysql> grant PROCESS, REPLICATION CLIENT, SELECT ON *.* to 'exporter'@'%' identified by '123456';

#vi .my.cnf
[client]
user=exporter
password=123456
#./mysqld_exporter --config.my-cnf=.my.cnf

下载容器并运行
在这里插入图片描述

进入容器、进入mysql、授权

在这里插入图片描述

下载mysql exporter二进制包并解压,移到/usr/local/mysqld_exporter包下:
在这里插入图片描述
创建my.cnf文件,配置用户名和密码
在这里插入图片描述
启动mysql exporter,并指定配置文件,连接mysql
在这里插入图片描述

查看是否启动成功,暴露端口是否成功
在这里插入图片描述

配置热加载功能

编辑prometheus系统服务配置文件
在这里插入图片描述

开启配置热加载功能
在这里插入图片描述

原先的值
在这里插入图片描述
修改的值
在这里插入图片描述

调用接口实现配置热加载
在这里插入图片描述

配置文件更新成最新的值
在这里插入图片描述

dbservers服务监控也加进来了
在这里插入图片描述

按照之前的配置导入mysql监控的仪表盘

推荐仪表盘ID:7362

在这里插入图片描述
输入ID,点击load。
在这里插入图片描述

输入name,选择数据源,点击import。
在这里插入图片描述

MySQL监控
在这里插入图片描述
选择时间,看到最新的数据
在这里插入图片描述
接下来会将Prometheus自动化监控、PromQL的基本使用、监控指标标签管理、报警神器AlertManager、Grafana可视化(自制仪表盘等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值