原文地址:
https://eco.dameng.com/community/post/202212111637462EPK4EAM53PH9M9Q6W
https://eco.dameng.com/community/post/202212160930507DKZJFLJ854UQE41TM
一、前言
使用监控软件实时监控达梦数据库的健康状况是保证高效运维工作的前提,接下来本文会从各个组件的搭建、如何自定义采集项exporter组件(源码)、手动/自动推送数据、邮件告警、短信告警、自动化部署脚本、注意事项等深入讲解热门监控软件Prometheu+Grafana监控达梦数据库的部署方法。
二、组件介绍
2.1 Prometheus介绍
Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库(TSDB)的组合。它受启发于 Google 的 内部的监控系统,由工作在 SoundCloud 的前 google 员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。
2016 年,doker容器化部署兴起,Prometheus 正式加入 Cloud Native Computing Foundation(CNCF)基金会的项目,成为受欢迎度仅次于 Kubernetes 的项目。2017 年底发布了基于全新存储层的 2.0 版本,能更好地与容器平台、云平台配合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。
官网:https://prometheus.io/docs/introduction/overview/
Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态(接口),任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。
Prometheus Server负责定时在目标(被监控组件)上抓取Metrics(指标)数据并保存到本地存储里面。Prometheus主要采用了Pull(拉)的方式获取数据,不仅降低客户端的复杂度,客户端只需要采集数据,无需了解服务端情况,而且服务端可以更加方便的水平扩展。
2.2 Prometheus与Zabbix的对比
Prometheus:Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库,并且系统每隔一两周就会有一个小版本的更新,而Prometheus与它的“师兄”Kubernetes都自带云原生的光环,天然能够友好协作。
Zabbix:Zabbix是由Alexei Vladishev开源的分布式监控系统,是一个企业级的分布式开源监控方案。能够监控各种网络参数以及服务器健康性和完整性的软件。
Zabbix | Prometheus |
后端用C语言开发,界面用PHP开发,定制化难度很高。 | 后端用golang开发,前端是Grafana,JSON编辑节即可解决。定制化难度较低。 |
集群规模上限为10000个节点。 | 支持更大的集群规模,速度也更快。 |
更适合监控物理机环境。 | 更适合云环境的监控,对OpenStack,Kubernetes有更好的集成。 |
监控数据库存储在关系型数据库内,如MySQL,很难从现有数据中扩展维度。 | 监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 |
安装简单,zabbix-server一个软件包中包括了所有的服务端功能。 | 安装相对复杂,监控、告警和界面都分属不同的组件。 |
图形化界面比较成熟,界面上基本能完成全部的配置操作。 | 界面相对较弱,很多配置需要修改配置文件。 |
发展的时间更长,对于很多监控场景,都有现成的解决方案。 | 2015年后开始快速发展,但发展时间较短,成熟度不及Zabbix。 |
2.3 Prometheus丨TSDB时序数据库
时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。
时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。应用的场景很多, 如:
- 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距离等等。每时每刻都要将数据记录下来做分析
- 某一个地区的各车辆的行驶轨迹数据
- 传统证券行业实时交易数据
- 实时运维监控数据等
2.4 Grafana介绍
Grafana是一款采用 Go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
下载地址:https://grafana.com/grafana/download/
三、配置Prometheus
3.1 下载Prometheus
下载地址:https://prometheus.io/download/
根据环境下载对应的版本,x86环境的话用这个。
3.2 安装Prometheus
更新同步操作系统时间,避免时间误差
ntpdate edu.ntp.org.cn && hwclock -w
创建目录
mkdir -p /opt/jiankong/jiankongSoft
cd /opt/jiankong/jiankongSoft
上传压缩包到jiankongSoft下,并解压
tar -zxvf prometheus-3.4.0.linux-amd64.tar.gz -C /opt/jiankong/
重命名prometheus文件名
cd /opt/jiankong/
mv prometheus-3.4.0.linux-amd64/ prometheus-3.4.0
3.3 启动Prometheus
前台启动服务进行测试
cd prometheus-3.4.0/
./prometheus --config.file="prometheus.yml
前台启动-指定监听端口(添加web.listen-address参数)
./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9091"
验证是否启动正常
lsof -i:9091
或者浏览器访问:http://192.168.241.131:9091/
验证无误后,改成后台方式启动
nohup ./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9091" > ./prometheus.log 2>&1 &
查询进程是否存在
ps -ef|grep prometheus
3.4 使用Prometheus
通过浏览器访问http://服务器IP:9091就可以访问到prometheus的主界面(默认时9090,我的是9091端口)
就可以查看监控的机器,如下
因为我已经全部配置好了,所以这里有三个节点。默认的情况下只监控本机(最下面一个)。
采集的信息可以通过http://服务器IP:9091/metrics可以查看到监控的数据 (prometheus本身也会采集本机的信息)
http://192.168.241.131:9091/metrics
在web主界面可以通过关键字查询监控项
3.5 注册服务
编辑服务配置文件如下
[root@dwp prometheus-3.4.0]# cat /lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Type=simple
Restart=on-failure
User=root
Group=root
WorkingDirectory=/opt/jiankong/prometheus-3.4.0/
ExecStart=/opt/jiankong/prometheus-3.4.0/prometheus --web.listen-address="0.0.0.0:9091" --web.read-timeout=5m --web.max-connections=256 --storage.tsdb.retention=15d --storage.tsdb.path=data/ --query.max-concurrency=20 --query.timeout=2m
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
## 我们需要将定制的prometheus的配置文件和数据目录作为启动参数配置好
## 其它的参数,可以基于prometheus --help配置。
更新 systemd 服务信息
systemctl daemon-reload
开机自启
systemctl enable --now prometheus.service
启动服务
systemctl start prometheus
其他命令
systemctl enable prometheus.service
systemctl stop prometheus.service
systemctl restart prometheus.service
systemctl status prometheus.service
## 查看日志
journalctl -u prometheus -f -n 500
四、配置Grafana
4.1 下载Grafana
下载地址:https://grafana.com/grafana/download
根据环境下载对应的版本,x86环境的话用这个Standalone Linux Binaries(64 Bit)
4.2 安装Grafana
上传压缩包到jiankongSoft下,并解压
tar -zxvf grafana-enterprise-12.0.1.linux-amd64.tar.gz -C /opt/jiankong/
4.3 启动Grafana
启动步骤
cd /opt/jiankong/grafana-v12.0.1/
## 后台方式启动
nohup ./bin/grafana-server > ./grafana.log 2>&1 &
查看端口默认是3000(稍等几秒)
lsof -i:3000
通过浏览器访问http://IP:3000 ,http://192.168.241.131:3000。默认用户名和密码:admin
4.4 注册服务
编辑服务配置文件如下
[root@dwp grafana-v12.0.1]# cat /lib/systemd/system/grafana_server.service
[Unit]
Description=Grafana
After=network.target
[Service]
Restart=simple
##注意用户
User=root
Group=root
WorkingDirectory=/opt/jiankong/grafana-v12.0.1
ExecStart=/opt/jiankong/grafana-v12.0.1/bin/grafana-server
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
更新 systemd 服务信息
systemctl daemon-reload
开机自启
systemctl enable --now grafana_server.service
启动服务
systemctl start grafana_server
其他命令
systemctl enable grafana_server.service
systemctl stop grafana_server.service
systemctl restart grafana_server.service
systemctl status grafana_server.service
## 查看日志
journalctl -u grafana_server -f -n 500
4.5 添加Prometheus数据源相关联
保存成功后看到提示
返回数据源列表便可以看到刚刚添加的Prometheus
接下来进行自定义采集的部署工作,自定义的采集项的流程大致如图所示,数据库所在机器需要部署两个进程,一个是监控服务器的exporter,一个是监控主机的exporter
五、监控主机
5.1 下载node_exporter
下载地址:https://prometheus.io/download/ ,下载相应版本,安装到服务器上官网提供的是二进制版,解压就能用,不需要编译。
根据环境下载对应的版本,x86环境的话用这个node_exporter-1.9.1.linux-amd64.tar.gz
5.2 安装node_exporter
部署在数据库所在服务器
更新同步操作系统时间,避免时间误差
ntpdate edu.ntp.org.cn && hwclock -w
新建目录
mkdir -p /opt/jiankong/jiankongSoft
cd /opt/jiankong/jiankongSoft
上传压缩包,并解压
tar -zxvf node_exporter-1.9.1.linux-amd64.tar.gz -C /opt/jiankong/
重命名node_exporter文件名
cd /opt/jiankong/
mv node_exporter-1.9.1.linux-amd64/ node_exporter-1.9.1
5.3 启动node_exporter
后台方式启动
cd node_exporter-1.9.1/
nohup ./node_exporter > ./node_exporter.log 2>&1 &
查看端口,默认是9100
lsof -i:9100
通过浏览器访问 http://被监控端IP:9100/metrics,就可以查看到node_exporter在被监控端收集的监控信息
http://192.168.241.131:9100/metrics
修改端口的话,用下面的命令
nohup ./node_exporter --web.listen-address=":9101" > ./node_exporter.log 2>&1 &
5.4 注册服务
编辑服务配置文件如下
[root@dwp node_exporter-1.9.1]# cat /lib/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/jiankong/node_exporter-1.9.1/node_exporter --web.listen-address=":9100"
Restart=on-failure
[Install]
WantedBy=multi-user.target
更新 systemd 服务信息
systemctl daemon-reload
开机自启
systemctl enable --now node_exporter.service
启动服务
systemctl start node_exporter
其他命令
systemctl enable node_exporter.service
systemctl stop node_exporter.service
systemctl restart node_exporter.service
systemctl status node_exporter.service
## 查看日志
journalctl -u node_exporter -f -n 500
六、监控数据库
6.1 部署自定义exporter
部署在数据库所在服务器
- 这里数据采集的jar包,是自定义编写的。源码在后面的文章也会有提供。可以按需开发修改
- jar包中sql语句只会执行select语句不会生成中间表等操作并且只有readonly权限
- jar包运行需要jdk1.8的运行环境,如本地没有环境可直接使用DM8目录下的jdk环境
新建目录
mkdir -p /opt/jiankong/dm_prometheus
上传压缩包dm_prometheus-1.0.jar,并解压
unzip dm_prometheus-1.0.jar -d /opt/jiankong/dm_prometheus
修改jar包连接数据的账号与密码(BOOT-INF/classes/下编辑db.setting)
6.2 启动自定义exporter
启动服务(启动jar包前修改环境变量MALLOC_ARENA_MAX
,避免jvm占用内存过多)
export MALLOC_ARENA_MAX=2
## 如果机器内存比较大可调整为 -Xms128m -Xmx1024m
后台方式启动
nohup java -jar -Xms256m -Xmx512m dm_prometheus-1.0.jar > ./dm_prometheus.log 2>&1 &
查看端口,默认为9200,需要等几秒
lsof -i:9200
通过浏览器访问 http://被监控端IP:9200/prometheus,就可以查看到dm_prometheus在被监控端收集的监控信息
http://192.168.241.131:9200/prometheus
七、修改Prometheus配置文件关联数据
进入到prometheus目录
cd /opt/jiankong/prometheus-3.4.0/
编辑prometheus.yml配置文件
# my global config
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"
static_configs:
- targets: ["localhost:9091"]
# The label name is added as a label `label_name=<label_value>` to any timeseries scraped from this config.
labels:
app: "prometheus"
# 添加的是主机监控的接口9100接口
- job_name: "dm_node_single"
static_configs:
- targets: ["192.168.241.131:9100"]
labels:
origin_prometheus: '单机测试'
# 添加的是数据库监控的接口9200接口,如果是一套集群,则在targets标签后进行逗号拼接,如下图所示
- job_name: "dm_db_single"
metrics_path: "/prometheus"
static_configs:
- targets: ["192.168.241.131:9200"]
labels:
cluster_name: '单机测试'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
注意:9200的地方:单机的话填一个IP,如果是集群的话,则在 targets 标签中添加,用逗号分隔
修改完成以后进行配置文件校验,避免因为空格等问题导致出错
[root@dwp prometheus-3.4.0]# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: prometheus.yml is valid prometheus config file syntax
八、重启Prometheus并进行连接校验
查看进程号
[root@dwp prometheus-3.4.0]# ps -ef|grep prometheus
root 68252 1 0 14:03 ? 00:00:25 ./prometheus --config.file=prometheus.yml --web.listen-address=0.0.0.0:9091
杀掉进程
kill -9 68252
重新启动
nohup ./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9091" > ./prometheus.log 2>&1 &
web界面查看验证:http://192.168.241.131:9091/targets
九、Grafana配置监控主机的图表
9.1 下载NodeExporter
进入 https://grafana.com/dashboards 页面,
➢ 搜索 Node Exporter,选择下载量最高的中文版本:
https://grafana.com/grafana/dashboards/
➢ 下载模板 json 文件
9.2 导入Node Exporter模板:监控主机
Dashboards ===> import ===> 选择json文件 ===> 改名===> 选择 Prometheus
效果图
十、Grafana配置数据库的图表
导入 Node Exporter 模板:监控达梦
Dashboards ===> import ===> 选择json文件 ===> 改名===> 选择 Prometheus
效果图