Prometheus+Grafana+zabbix搭建的监控平台
目录- Prometheus+Grafana+zabbix搭建的监控平台
1. 介绍
1.1 Prometheus是什么?Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。
Prometheus - Monitoring system & time series database(https://prometheus.io/)
Prometheus · GitHub(https://github.com/prometheus)
作为新一代的监控框架,Prometheus 具有以下特点:
• 多维数据模型:由度量名称和键值对标识的时间序列数据
• PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
• 不依赖分布式存储,单个服务器节点可直接工作
• 基于HTTP的pull方式采集时间序列数据
• 推送时间序列数据通过PushGateway组件支持
• 通过服务发现或静态配置发现目标
• 多种图形模式及仪表盘支持
Prometheus适用于以机器为中心的监控以及高度动态面向服务架构的监控。
1.2 Grafana是什么?
Grafana是一个开源的度量分析和可视化系统。
Grafana支持查询普罗米修斯。自Grafana 2.5.0(2015-10-28)以来,包含了Prometheus的Grafana数据源。
从Grafana.com导入预先构建的仪表板。
Grafana.com维护着一组共享仪表板 ,可以下载并与Grafana的独立实例一起使用。
Download Grafana | Grafana Labs(https://grafana.com/grafana/download)
从Grafana.com导入预先构建的仪表板。
Grafana.com维护着一组共享仪表板 ,可以下载并与Grafana的独立实例一起使用。
简单来说:Grafana提供了比Prometheus更加友好美观的展示界面
模板界面下载地址(https://grafana.com/grafana/dashboards/?plcmt=footer)
2. Prometheus+Grafana安装
2.1 组件
组件 说明
prometheus-2.41.0.windows-amd64 监控server端,用于汇总展示各收集器的资源情况(界面丑)
grafana-enterprise-8.2.2.windows-amd64 度量分析可视化系统,仪表盘多,替换prometheus默认展示界面
2.2 安装包下载
Prometheus下载地址:https://prometheus.io/download/
grafana下载: https://grafana.com/grafana/download?platform=windows
2.4 Prometheus 安装
linux下安装:
tar -zxvf prometheus-2.43.0.linux-amd64.tar.gz
直接启动:
nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &
设置开机自启
1.在/etc/systemd/system/路径下编辑prometheus.service (linux centos7系统)
$ cat /etc/systemd/system/prometheus.service
[Unit]
Description=logging prometheus service
Documentation=https://prometheus.io
[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/prometheus-2.43.0/prometheus --config.file=/opt/prometheus-2.43.0/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 通过systemctl命令启动prometeus.service
$ systemctl daemon-reload //重新加载服务配置文件
$ systemctl start prometheus && systemctl enable prometheus //启动prometheus并设置开机自启动
Docker部署Prometheus
Prometheus相关介绍
官方介绍,非常的清楚:
https://prometheus.io/docs/introduction/overview/
Prometheus(普罗米修斯)是一个开源的系统监控和报警系统,具有活跃的生态系统。
2016年加入到CNCF基金会(Cloud Native Computing Foundation),成为继k8s之后第二个在CNCF托管的项目。
目前,行业常见的收集监测数据方式主要分为推送(Push)和抓取(Pull)两个模式。以越来越广泛应用的Prometheus监测体系举例,Prometheus监控就是以抓取(Pull)模式运行的典型系统。应用及基础设施的监测数据以OpenMetrics标准接口的形式暴露给Prometheus监控,然后由Prometheus监控进行定期抓取并长期存储。
OpenMetrics,是云原生、高度可扩展的指标协议。 OpenMetrics定义了大规模上报云原生指标的事实标准,并支持文本表示协议和Protocol Buffers协议,文本表示协议在其中更为常见,也是在Prometheus监控进行数据抓取时默认采用的协议。
指标的数据模型由指标(Metric)名,以及一组Key/Value标签(Label)定义的,具有相同的度量名称以及标签属于相同时序集合。
随着时间推移,这些收集起来的采样点数据将在图表上实时绘制动态变化的线条
目前,对于云原生体系下的绝大多数基础组件能够支持OpenMetrics的文本协议格式暴露指标,对于暂不能支持自身暴露指标的组件, Prometheus社区也存在极其丰富的Prometheus Exporter供开发及运维人员使用。这些组件(或Exporter)通过响应来自Prometheus监控的定期抓取请求来及时地将自身的运行状况记录到Prometheus监控以便后续的处理及分析。对于应用开发者,您还可以通过Prometheus监控的多语言SDK,进行代码埋点,将自身的业务指标也接入到上述的Prometheus生态当中。
Docker部署Prometheus说明
监控端安装:
Prometheus Server(普罗米修斯监控主服务器 )
Node Exporter (收集Host硬件和操作系统信息)
cAdvisor (负责收集Host上运行的容器信息)
Grafana (展示普罗米修斯监控界面)
被监控安装:
Node Exporter (收集Host硬件和操作系统信息)
cAdvisor (负责收集Host上运行的容器信息)
安装Prometheus
可以参考:
https://hub.docker.com/r/prom/prometheus
搜索镜像
docker search prom/prometheus
拉取镜像
版本号可以去官网查看:
https://hub.docker.com/r/prom/prometheus
docker pull prom/prometheus
配置
准备相关挂载目录及配置文件。本文使用/Users/xxx/路径作为案例,自行按需替换。
# 新建prometheus目录,并
mkdir -p /Users/xxx/prometheus/{data,config,rules}
# 如果需要授权相关文件夹权限,可以参考下面的命令
chmod -R 777 /Users/xxx/prometheus/data
chmod -R 777 /Users/xxx/prometheus/rules
chmod -R 777 /Users/xxx/prometheus/config
# 编辑prometheus.yml文件
cd /Users/xxx/prometheus/config
sudo vim prometheus.yml
配置文件修改:
global:
scrape_interval: 60s
evaluation_interval: 60s
# 告警规则
rule_files:
# 这里匹配指定目录下所有的.rules文件
- /prometheus/rules/*.rules
scrape_configs:
- job_name: prometheus
static_configs:
# prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
- targets: ["111.111.0.88:9090"]
labels:
instance: prometheus
- job_name: node
static_configs:
# 注意,这里的ip需要配宿主机器的ip地址,因为prometheus是通过docker的方式部署的
- targets: ["111.111.0.88:9100"]
labels:
instance: node
prometheus配置项说明
global: 全局配置 (如果有内部单独设定,会覆盖这个参数)
alerting: 告警插件定义。这里会设定alertmanager这个报警插件
rule_files: 告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现
scrape_configs: 采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现
remote_write: 用于远程存储写配置
remote_read: 用于远程读配置
启动容器
docker run -d -p 9090:9090 --name prometheus \
-v /etc/localtime:/etc/localtime:ro \
-v /Users/xxx/prometheus/data:/prometheus/data \
-v /Users/xxx/prometheus/config:/etc/prometheus \
-v /Users/xxx/prometheus/rules:/prometheus/rules \
prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
运行起来后,可以访问:http://localhost:9090/
配置说明:
- config.file:指定配置文件,路径是容器中的路径,不是宿主机中的路径
- web.enable-lifecycle:启动此项后,当配置文件发生变化后,可通过HTTP API 发送 post 请求到 /-/reload,实现热加载,如:curl -X POST http://localhost:9090/-/reload
- -v /etc/localtime:/etc/localtime:ro 表示让容器使用宿主机的时间, :ro表示只读 (注:此方式只针对宿主机和容器的时区文件均为/etc/localtime);
进入容器
注意:prometheus用的是sh,不是bash。
docker exec -it prometheus sh
遇到的问题
Are you trying to mount a directory onto a file (or vice-versa)?
可以参考下面的文章解决:
https://blog.csdn.net/u014163312/article/details/129135384
其他可能的错误
1.在指定了保存天数–storage.tsdb.retention.time参数后,必须指定–config.file配置文件路径。否则会报以下异常。
level=error msg=“Error loading config (–config.file=prometheus.yml)” err=“open prometheus.yml: no such file or directory”
2.Docker容器中的prometheus服务默认是以nobody用户启动的,如果出现权限问题,可以在创建容器时指定root用户,或更改文件权限。
err=“open /prometheus/queries.active: permission denied”
3.出现iptables错误,需要重启docker服务:service docker restart
docker0: iptables: No chain/target/match by that name
2.5 安装 Grafana
Grafana介绍:
在获取应用或基础设施运行状态、资源使用情况,以及服务运行状态等直观信息后,通过查询和分析多类型、多维度信息能够方便的对节点进行跟踪和比较。同时,通过标准易用的可视化大盘去获知当前系统的运行状态。
比较常见的解决方案就是Grafana,作为开源社区中目前热度很高的数据可视化解决方案,Grafana提供了丰富的图表形式与模板。
拉取镜像
# 此方式,即拉取最新的镜像,等同于 docker pull grafana/grafana:lastest
docker pull grafana/grafana
# 也可以拉取指定版本的
docker pull grafana/grafana:9.3.2
准备相关挂载目录及文件
准备目录
# /Users/xxx/grafana/data 目录,准备用来挂载放置grafana的数据
# /Users/xxx/grafana/plugins 目录,准备用来放置grafana的插件
# /Users/xxx/grafana/config 目录,准备用来挂载放置grafana的配置文件
mkdir -p /Users/xxx/grafana/{data,plugins,config}
# 如果需要授权相关文件夹权限,可以参考下面的命令
chmod -R 777 /Users/xxx/grafana/data
chmod -R 777 /Users/xxx/grafana/plugins
chmod -R 777 /Users/xxx/grafana/config
准备配置文件
# 先临时启动一个容器
docker run --name grafana-tmp -d -p 3000:3000 grafana/grafana
# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini /Users/xxx/grafana/config/grafana.ini
# 移除临时容器
docker stop grafana-tmp
docker rm grafana-tmp
# 修改配置文件(需要的话)
# vim /Users/xxx/grafana/config/grafana.ini
启动容器
# 启动grafana
# 环境变量GF_SECURITY_ADMIN_PASSWORD:指定admin的密码
# 环境变量GF_INSTALL_PLUGINS:指定启动时需要安装得插件
# grafana-clock-panel代表时间插件
# grafana-simple-json-datasource代表json数据源插件
# grafana-piechart-panel代表饼图插件
docker run -d \
-p 3000:3000 \
--name=grafana \
-v /etc/localtime:/etc/localtime:ro \
-v /Usersx x x/grafana/data:/var/lib/grafana \
-v /Users/xxx/grafana/plugins/:/var/lib/grafana/plugins \
-v /Users/xxx/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
-e "GF_SECURITY_ADMIN_PASSWORD=admin" \
-e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" \
grafana/grafana
docker ps -a
docker start 657b42fd26cd
docker start grafana
访问测试
访问http://localhost:3000/即可,使用账密admin/admin进行登录即可
3.添加 Prometheus 数据源
grafana -> Settings -> Data sources -> Add data source -> Prometheus
- 在HTTP URL中填写本机IP+Prometheus服务器运行的port.
- HTTP Method选择Get方法
常见问题
添加prometheusDatasource报错: Error reading Prometheus: An error occurred within the plugin
解决:将添加数据源的ip设置为本机ip,当设置为localhost时由于容器环境运行的grafana,所以localhost在容器内部可能有自己的定义。
看板配置
grafana官网已经提供了许多模板,我们可以下载自己需要的模板,然后导入本地grafana。
官网地址:https://grafana.com/grafana/dashboards/。
首先在官网搜索,比如JVM,然后选择需要的模板,点击查看详情,即可以看到模板数据。
模板导入支持3种方式:
下载模板对应的json文件,然后上传json文件导入
使用模板ID在线导入,需要Grafana连接外网
直接编辑模板的json字符串然后导入
可以用以下两个Grafana社区中的开源大盘模板来构建自己的业务监测模板:
https://grafana.com/grafana/dashboards/10280?spm=a2c4g.11186623.0.0.6f4c1640jJ0xzj
4. Windows 安装 exporter
4.1 部署配置windows资源采集器
4.1.1 安装包下载
官方下载地址:https://github.com/prometheus-community/windows_exporter/releases
百度云网盘:https://pan.baidu.com/s/1KXedfMPOs84CsbxXRCxKhQ?pwd=38i6
4.1.2 安装Windows-exporter
(1)用管理员身份运行 windows_exporter-0.20.0-amd64.msi ,运行成功后服务中可以看到windows_exporter服务
(2)将服务状态修改为 “自动(延迟启动)”
(3)浏览器访问http://127.0.0.1:9182/metrics,看到如下界面成功
(4) 在prometheus端配置windows_exporter采集器地址,在prometheus.yml 中添加如下内容 (注意缩进)
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["192.168.205.xxxx:9090"]
- job_name: "NC TEST"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["192.168.201.xxx:9100"]
(5)重启prometheus端,打开http://127.0.0.1:9090/targets,windows状态为up即成功
4.1.3 导入 windows-exporter 仪表盘
(1)打开Dashboards-Manage
(2)点击 import
(3)仪表盘模板导入
仪表盘有两种导入的方式,一种是选择上传 json 文件,该文件是仪表盘json文件,一次上传一个,选择模板后,点击import。另一种是根据 dashboard ID 上传,在 "Load" 按钮前面输入官方提供的 dashboard ID ,然后点击 "Load" 按钮。
当前导入的是 windows-exporter 的dashboard ,选择用 dashboard ID进行import:
这里我输入了 10467,它是 windows-exporter的 dashboard ID,然后点击 “Load”
(4)选择数据来源,也就是选择 Prometheus 实例
进入当前页面,在底部的 prometheus 下拉框选择 Prometheus 实例,点击 import 完成。
(5)打开Dashboards,可以看到已经添加了的 [windows资源监控] 仪表盘,打开详情如下:
5. Linux 安装部署 exporter
5.1 部署安装 node_exporter
5.1.1 安装包下载
官方下载地址:https://github.com/prometheus/node_exporter/releases
百度云网盘:https://pan.baidu.com/s/1Xn-mTCo4DqENRlEgo2dRjg?pwd=bl7x
5.1.2 安装
将安装包 node_exporter-0.18.1.linux-amd64.tar.gz 上传至服务器。
tar -zvxf node_exporter-1.5.0.linux-amd64.tar.gz
mv node_exporter-1.5.0.linux-amd64 /usr/local/
ln -s /usr/local/node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter
5.1.3 注册为系统服务
vim /usr/lib/systemd/system/node_exporter.service
cat > /usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
重置系统服务并将node_exporter开机自启、启动 node_exporter服务
systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter
尝试登陆
4.1.4 浏览器访问http://ip:9100/metrics,看到如下界面成功
5.1.5 添加到 Prometheus 配置监控
- job_name: "NC TEST"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["192.168.xx.xx:9100"]
(2)重启Prometheus
稍等一会,访问http://127.0.0.1:9090/targets,发现node_exporter已经添加进去。
5.1.6 配置 Grafana
去地址:Dashboards | Grafana Labs查找node_exporter模板。
这里使用:Node Exporter for Prometheus Dashboard based on 11074,ID 号为:15172。
在 Dashboards manager 使用 dashboard ID 进行 import 加载仪表盘,效果如下:
6 部署安装 oracle_exporter
注意:oracle_exporter 只有linux版本没有windows版本,因此我们可以启动多个服务(通过远程连接)来监控windows下的oracle服务
6.1 安装包下载
官方下载地址:https://github.com/iamseth/oracledb_exporter/releases
百度云网盘:https://pan.baidu.com/s/1Xn-mTCo4DqENRlEgo2dRjg?pwd=bl7x
软件包版本:
oracle-instantclient-basic-21.4.0.0.0-1.x86_64.rpm
oracledb_exporter.0.3.0rc1-ora18.5.linux-amd64.tar.gz for 12C
oracledb_exporter.0.2.3.linux-amd64.tar.gz for 11g
Oracle database server 12C
6.2 安装
tar -zxvf oracledb_exporter.0.2.9-ora18.5.linux-amd64.tar.gz
mv oracledb_exporter.0.2.9-ora18.5.linux-amd64 /usr/local/oracle_exporter
6.3 编辑环境变量配置文件
增加一个TNS_ADMIN环境变量
vim ~/.bash_profile
# oracle环境变量
export ORACLE_SID=orcl
export ORACLE_HOME=/data/oracle/product/11.2.0/db_1
# oracledb_exporter环境变量
export PATH=$PATH:$ORACLE_HOME/bin
# export DATA_SOURCE_NAME=用户名/密码
export DATA_SOURCE_NAME=system/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
step 3.创建 DATA_SOURCE_NAME
确保在启动前正确设置环境变量 DATA_SOURCE_NAME。
DATA_SOURCE_NAME 应采用 Oracle EZCONNECT 格式:
https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/configuring-naming-methods.html#GUID-B0437826-43C1-49EC-A94D-B650B6A4A6EE
19c Oracle Client 支持增强的 EZCONNECT,您可以故障转移到备用数据库或从活动备用数据库收集一些重要指标并指定一些附加参数。 在 19c 客户端中,您也可以连接 12c 主/备用数据库