目录
2.3、基于docker镜像直接启动或通过docker-compose编排
2.8、在Prometheus Server上添加node节点
2.10.1、修改node_exporter的service文件
一、Prometheus简介
1.1、Prometheus基本介绍
Prometheus是基于Go语言开发的一套开源的监控、告警和时间序列数据库的组合,是由 SoundCloud公司开发(2012年)的开源监控系统。
Prometheus于2016年加入CNCF(Cloud Native Computing Foundation ,云原生计算基金会),2018年8月9日Prometheus成为CNCF继Kubernetes
之后毕业的第二个项目,它可以监控主机,服务,容器,支持多种exporter采集数据,还支持 pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群,Pormetheus在容器 和微服务领域中得到了广泛应用,其主要优缺点如下:
- 使用key-value的多种维度(多个角度、多个层面、多个方面)格式保存数据,支持通过多个 维度对数据进行查询
- 使用TSDB数据库存储数据:TSDB性能好,存储成本低
- 支持第三方dashboard实现更绚丽的图形界面,如grafana
- 组件是模块化的,Prometheus Server/Exporter/Alertmanager等组件
- 不依赖存储,数据可本地保存也可以远程保存
- 平均每个采样点占3.5bytes,且一个Pometheus server可以处理数百万级别的metrics指标数 据
- 支持静态配置和自动化服务发现(基于consul等方式动态发现被监控的目标服务)
- 强大的数据查询语句(PromQL/Prometheus Query Language ),还提供http查询接口
- 数据可以直接进行算术运算
- 易于横向伸缩
- 众多官方和第三方的expoter(数据导出器)实现不同的指标数据收集
1.2、Prometheus监控原理
Prometheus Server 基于服务发现(Service Discovery)机制或静态配置获取要监视的目标 (Target),并通过每个目标上的指标 exporter 来采集(Scrape)指标数据;
Prometheus Server 内置一个基于文件的时间序列存储来持久存储指标数据,用户可使用 PromQL 接口来检索数据,也能够按需将告警需求发往 Alertmanager 完成告警内容发送; 一些短期运行的作业的生命周期过短,难以有效地将必要的指标数据供给到 Server 端,它们一 般会采用推送(Push)方式输出指标数据, Prometheus 借助于 Pushgateway 接收这些推送的 数据,进而由 Server 端进行抓取
Prometheus server 把采集到的监控指标数据通过 TSDB 存储到本地 HDD/SSD 中。 Prometheus 采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的告警通知发送到 Alertmanager。
Alertmanager 通过配置报警接收方,发送报警到邮件、钉钉或者企业微信等。 Prometheus 自带的 Web UI 界面提供 PromQL 查询语言,可查询监控数据。 Grafana 可接入 Prometheus 数据源,把监控数据以图形化形式展示出。
1.3、Prometheus 的局限性
Prometheus 是一款指标监控系统,不适合存储事件及日志等;它更多地展示的是趋势性的监 控,而非精准数据;
Prometheus 认为只有最近的监控数据才有查询的需要,其本地存储的设计初衷只是保存短期 (例如一个月)数据,因而不支持针对大量的历史数据进行存储;
若需要存储长期的历史数据,建议基于远端存储机制将数据保存于 InfluxDB 或 OpenTSDB 等系 统中;
Prometheus 的集群机制成熟度不高,可基于 Thanos 或 Cortex 实现 Prometheus 集群的高可用 及联邦集群。
二、部署Prometheus
Prometheus可以通过不同的方式安装部署Prometheus监控环境,实际生产环境中只需要根据实 际需求选择其中一种方式部署即可,无论使用哪一种方式安装部署Prometheus server,以后的 使用都是一样的。
2.1、使用apt或者yum安装
~# apt install prometheus
~# yum install prometheus
2.2、基于官方提供的二进制文件安装
https://prometheus.io/download
2.3、基于docker镜像直接启动或通过docker-compose编排
https://prometheus.io/docs/prometheus/latest/installation
2.4、基于Operator部署在Kubernetes环境
2.5、Prometheus配置文件主要参数
--config.file="prometheus.yml" #指定配置文件
--web.listen-address="0.0.0.0:9090" #指定监听地址
--storage.tsdb.path="data/" #指定数存储目录 --storage.tsdb.retention.size=B,KB,MB,GB,TB,PB,EB #指定block大小,默认512MB
--storage.tsdb.retention.time= #数据保存时长,默认15天
--query.timeout=2m #最大查询超时时间
--query.max-concurrency=20 #最大查询并发数
--web.read-timeout=5m #最大空闲超时时间
--web.max-connections=512 #最大并发连接数
--web.enable-lifecycle #启用API动态加载配置功能
2.6、部署Prometheus服务监控端
这里我使用官方二进制进行安装部署
2.6.1、下载最新版Prometheus
~# wget https://github.com/prometheus/prometheus/releases/download/v2.53.2/prometheus-2.53.2.linux-amd64.tar.gz
2.6.2、解压文件
~# tar zxvf prometheus-2.53.2.linux-amd64.tar.gz -C /usr/local/
~# ln -sv /usr/local/prometheus-2.53.2.linux-amd64 /usr/local/prometheus
2.6.3、编辑service文件
创建Prometheus的service文件
~# vim /usr/lib/systemd/system/prometheus.service
#写入
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
# Type设置为notify时,服务会不断重启
Type=simple
User=root
# --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
2.6.4、启动Prometheus服务
~# systemctl daemon-reload && systemctl start prometheus
~# systemctl status prometheus
2.6.5、访问Prometheus的web界面
浏览器输入http://PROM_IP:9090,能显示如下信息,表示prometheus server部署成功
2.7、部署node_exporter
node-exporter简介
node-exporter收集当前机器的系统数据,采用prometheus官方提供的exporter node-exporter部署
2.7.1、下载node_exporter的二进制文件
~# wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
2.7.2、解压文件
~# tar zxvf node_exporter-1.8.2.linux-amd64.tar.gz -C /usr/local/
~# ln -sv /usr/local/node_exporter-1.8.2.linux-amd64.tar.gz -C /usr/local/node_exporter
2.7.3、编辑service文件
创建node_exporter的service文件
~# vim /usr/lib/systemd/system/node_exporter.service
#写入
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
2.7.4、启动node_exporter
~# systemctl daemon-reload && systemctl start node_exporter
2.7.5、检查node_exporter服务状态
~# systemctl status node_exporter
访问node_exporter的web界面
浏览器输入http://NODE_EXPORTER_IP:9100,能显示如下信息表示node_exporter服务部署成 功
2.8、在Prometheus Server上添加node节点
2.8.1、编辑prometheus的配置文件
在/usr/local/prometheus/prometheus.yml文件中添加节点信息
~# vim /usr/local/prometheus/prometheus.yml
- job_name: "node_exporter"
static_configs:
- targets: ["172.16.1.65:9100"]
2.8.2、检查prometheus.yml文件格式
2.8.3、热加载prometheus配置
2.8.4、访问prometheus页面,查看node信息
2.9、node_exporter 的PromQL查询语句
在Prometheus的web页面,点击Graph,在输入框输入PromQL,执行后可以点击下面的Graph 查看图像
一些常用PromQL如下
系统启动时间
node_boot_time_seconds
CPU核数
count(node_cpu_seconds_total{mode='system'}) by (instance)
计算 CPU 使用率
计算内存使用率
(1- (node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes) * 100
(1 - node_filesystem_avail_bytes{fstype=~"ext4|xfs"} /
node_filesystem_size_bytes{fstype=~"ext4|xfs"}) * 100
网络带宽
下行带宽
sum by(instance) (irate(node_network_receive_bytes_total{device!~"bond.*?|lo"}[5m]))
sum by(instance) (irate(node_network_transmit_bytes_total{device!~"bond.*?|lo"}[5m]))
2.10、node_exporter自定义指标
果node_exporter内置的采集指标不能满足需求,我们可以自定义一些采集指标,方法如下
2.10.1、修改node_exporter的service文件
~# vim /usr/lib/systemd/system/node_exporter.service
2.10.2、编写监控脚本
创建上一步添加的目录,并在该目录下编写监控脚本,脚本内容随意,执行结果输出到.prom后 缀的文件中
~# mkdir -pv /usr/local/node_exporter/custom_metrics
~# cd /usr/local/node_exporter/custom_metrics
~# vim up-custom-metrics.sh
脚本示例(实时获取系统启动时间和内存空闲大小,并输出到metrics1.prom和metrics2.prom两 个文件):
#!/bin/bash
UPTIME=`cat /proc/uptime | awk '{print $1}'`
MemFree=`cat /proc/meminfo | grep MemFree | awk '{print $2}'`
echo "uptime ${UPTIME}" > /usr/local/node_exporter/custom_metrics/metrics1.prom
echo "MemFree ${MemFree}" > /usr/local/node_exporter/custom_metrics/metrics2.prom
2.10.3、检查自定义指标
node_exporter的web界面能查询到如下信息说明自定义的指标已被成功收集
三、部署Grafana
rometheus这个监控软件的展示界面实在是有些难看,所以换一个展示方式:Grafana, Grafana是一个开源的度量分析和可视化工具(没有监控功能),可以通过将采集的数据分析, 查询,然后进行可视化的展示,并能实现报警。
3.1 、grafana安装
3.1.1、grafana安装
软件包获得
官方网站: grafana:Grafana: The open observability platform | Grafana Labs
启动成功后通过浏览器查看grafana的页面,初始默认用户密码admin/admin
修改中文界面
3.1.2、添加数据源
过主页进入DATA SOURCE
选择Prometheus
这里写Prometheus的IP和端口,其他选项先默认即可
点击最下方的Save & test,显示Successfully queried the Prometheus API即表示连接成功
返回主页进入DASHBOARDS界面
有3种方式可以导入模版,1上传json文件,2.通过ID直接导入 3.直接键入json内容
可以通过grafana官网查找自己想要的模版
选中一个自己想要的,可以通过ID和下载josn文件的方式获取
比如,使用ID直接导入
上传Json文件的方式
欢迎关注作者的公众号,公众号每天分享运维干货文章