prometheus/node_exporter与达梦数据库

目录

1.node_exporter介绍

2.下载地址

3. 安装

4.自定义监控项目

5.达梦数据库自定义样例

6.结果文本说明


1.node_exporter介绍

Node Exporter 是 Prometheus 官方发布的,用于采集节点的系统信息,比如 CPU,内存,磁盘和网络等信息。采用node_exporter也是为了使用其自带的自定义监控项功能。

2.下载地址

Download | Prometheus

在里面可以看到各种版本的,这里的amd64就是x86-64位的,不是amd处理器的意思。

如果是arm架构的系统可以根据版本选择arm5、arm6、arm7

3. 安装

主要步骤如下:

  1. 创建系统级别的用户和组prometheus
  2. 解压安装包
  3. 编写启动脚本

groupadd prometheus

useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus

tar -zxvf node_exporter-1.1.0.linux-amd64.tar.gz

mv node_exporter-1.1.0.linux-amd64 /usr/local/node_exporter

编辑服务启动文件centos7可以参考

[root@suys01 ~]# more /usr/lib/systemd/system/node_exporter.service

[Unit]

Description=node_exporter

After=network.target

[Service]

User=prometheus

ExecStart=/usr/local/node_exporter/node_exporter  --web.config=/usr/local/node_exporter/config.yml

--collector.textfile.directory=/data/node_exporter

[Install]

WantedBy=multi-user.target

[root@suys01 ~]#

蓝色的是一行,collector.textfile.directory配置从指定文件读取监控指标信息

设置开机启动

systemctl enable node_exporter

systemctl restart node_exporter

4.自定义监控项目

1.利用参数--collector.textfile.directory配置从指定文件读取监控指标信息。

2.利用linux系统的 crontab定时任务脚本收集自定义信息写入--collector.textfile.directory指定目录下的文件,供node_exporter读取。

3.放入collector.textfile.directory指定目录的文件,后缀必须是*.prom,也就是说crontab运行结果写入文件的后缀必须是*.prom,还必须有读取权限。

4. 结果格式必须是metircs 格式

metric name {<label name>=<label value>, ...} value

主要分为三个部分
各个部分需符合相关的正则表达式
metric name:指标的名称,主要反映被监控样本的含义 a-zA-Z_:*
label name: 标签 反映了当前样本的特征维度 [a-zA-Z0-9_]*
label value: 各个标签的值,不限制格式

Value:  metric 的数值

例如:

dm_147_tablespace_total_gb{checktime="2022-03-07 09:40", name="TBS_PROD"} 2

dm_147_tablespace_total_gb: 我自定义的  147的表空间总大小单位GB

checktime="2022-03-07 09:40": 取值时间

name="TBS_PROD" : 表空间名称

2: 就是 2G 表示 TBS_PROD 空间的大小

5.达梦数据库自定义样例

本次我只实现了几个比较简单的监控项

  1. "dmserver" "dmwatcher" "dmmonitor" "dmap" "dmagent" 是否存活监控
  2. 表空间使用率的监控(表空间大小,空闲大小,使用比例)
  3. 死锁监控
  4. session监控
  5. 设置系统crontab,dmdba用户执行即可
  6. 相关例子如下:

[dmdba@suys3 node_exporter]$ more /home/dmdba/shell/dem_shell.sh

#!/bin/bash

source /home/dmdba/.bash_profile

filepath='/home/dmdba/node_exporter/dm_process.prom'

v_date=$(date '+%Y-%m-%d %H:%M')

echo "#"检查时间:$v_date >${filepath}

dm_service=("dmserver" "dmwatcher" "dmmonitor" "dmap" "dmagent")

for dm in ${dm_service[@]}

do

        ps_out=`ps -ef | grep $dm | grep -v 'grep'`

        result=$(echo $ps_out | grep "$dm")

        if [[ "$result" == "" ]];then

          echo "${dm}_status{checktime=\"$v_date\"} 0" >> ${filepath}

        else

          echo "${dm}_status{checktime=\"$v_date\"} 1" >> ${filepath}

        fi

done

disql -s  SYSDBA/SYSDBA > /tmp/tablespace.log<<EOF

SET ECHO OFF

SET FEEDBACK OFF

SET LINESHOW OFF

SET HEADING OFF

SET TIMING OFF

SET LINESIZE 5000

SET PAGESIZE 1000

spool /home/dmdba/node_exporter/tablespace.prom

SELECT

'dm_147_tablespace_free_gb{checktime="${v_date}", name="'||F.TABLESPACE_NAME|| '"} '|| round(F.FREE_SPACE / 1024,2) as A

FROM (SELECT TABLESPACE_NAME,

ROUND(SUM(BLOCKS *

(SELECT PARA_VALUE / 1024 FROM V\$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACE FROM DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME) T

WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;

SELECT

'dm_147_tablespace_total_gb{checktime="${v_date}", name="'||F.TABLESPACE_NAME|| '"} '|| round(T.TOTAL_SPACE / 1024,2) as B

FROM (SELECT TABLESPACE_NAME,

ROUND(SUM(BLOCKS *

(SELECT PARA_VALUE / 1024 FROM V\$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACE FROM DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME) T

WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;

SELECT

 'dm_147_tablespace_free_per{checktime="${v_date}",name="'||F.TABLESPACE_NAME|| '"} '|| (ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) as C

FROM (SELECT TABLESPACE_NAME,

ROUND(SUM(BLOCKS *

(SELECT PARA_VALUE / 1024 FROM V\$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACE FROM DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME) T

WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;

select 'dm_lock_count{checktime="${v_date}" } '|| count(*) from v\$lock l,sysobjects o where l.table_id=o.id and blocked=1;

select 'user_sessoion{username="'||user_name||'",state="'||state||'", checktime="${v_date}"} '|| count(*)  from v\$sessions group by user_name,state;

spool off

quit

EOF

[dmdba@suys3 node_exporter]$

注意 系统表带$的,在shell文本里面要转义,加上一个”\”

如果客户已经部署了dem,相关数据可以直接查询dem的数据,再展现处理。

6.结果文本说明

dm_147_tablespace_free_gb{checktime="2022-01-14 11:30", name="SYSTEM"} 0.14

表空间剩余大小 单位G, name=表空间名称  value =0.14G=140M

dm_147_tablespace_total_gb{checktime="2022-01-14 11:30", name="TBS_PROD"} 2

表空间总大小 单位G     name=表空间名称  value =2G

dm_147_tablespace_free_per{checktime="2022-01-14 11:30",name="SYSTEM"} 91

表空间空闲率  单位%   name=表空间名称 value=91  就是91%

dm_lock_count{checktime="2022-01-17 09:10" } 0

查询死锁的数量  0 就是 0个死锁

user_sessoion{username="SYSDBA",state="ACTIVE", checktime="2022-01-17 09:10"} 1

用户session会话查询  username 数据库用户名  state用户会话sesssion状态 如 ACTIVE

dmserver_status{checktime="2022-01-17 09:15"} 1

操作系统中数据库 dnserver 进程是否存活  1=存在  0=不存在

dmwather_status{checktime="2022-01-17 09:15"} 0

操作系统中数据库dmwather进程是否存活  1=存在  0=不存在

dmmonitor_status{checktime="2022-01-17 09:30"} 0

操作系统中数据库dmmonitor进程是否存活  1=存在  0=不存在

dmap_status{checktime="2022-01-17 09:30"} 1

操作系统中数据库dmap进程是否存活  1=存在  0=不存在

dmagent_status{checktime="2022-01-17 09:30"} 1

操作系统中dmagent进程是否存活  1=存在  0=不存在

发布效果如下:

后面有时间,会发一版python版本,主要是本人不太会shell解析文件,想后面解析一下mmonitor进程show命令结果,请大家关注!!!

达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心达梦数据库产品体验站,DM8在线试玩,达梦数据库全系列产品免费下载,官方权威的快速上手文档和产品手册,最活跃的达梦技术社区,面向全行业ISV厂商免费的云适配服务。https://eco.dameng.com/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值