当前位置:   article > 正文

Nightingale配置自定义监控项(exec模块)_nightingale telegraf 执行脚本

nightingale telegraf 执行脚本

一、配置监控目录与文件的实时大小

实现原理:脚本采集数据,通过telegraf的exec模块上报给夜莺展示

1.配置python(代码在最后)

##安装python3,有的话就跳过
[root@localhost ~]# yum -y install python3
##解压dirsize.tar.gz
[root@localhost home]# tar -zxvf dirsize.tar.gz
[root@localhost home]# cd dirsize/
[root@localhost dirsize]# ll
total 8
-rwxr-xr-x 1 root root  272 Apr 29 15:43 config.py
-rw-r--r-- 1 root root 1476 Apr 29 15:42 directory_size.py
-rwxr-xr-x 1 root root    0 Apr 29 09:55 __init__.py
drwxr-xr-x 2 root root   35 Apr 29 15:41 __pycache__
##配置采集目录与文件
[root@localhost dirsize]# vim config.py
##采集目录的绝对路径;格式:'绝对路径',结尾加"/",配置多个目录时,中间用逗号隔开
##如果你只想采集目录或文件,也可以为空,但要注意‘[]’必须要保留
Path = [
    '/home/gxslzy/', 
    '/home/mysql/',
    '/asdfas/'
]
filename = [
    '/home/dirsize/logs.log',
    '/home/gxslzy/7111-bhhc/nohup2022-05-05.out'
]
:wq #保存退出
##配置完成路径以后,运行directory_size.py(测试)
[root@localhost dirsize]# python3 directory_size.py 
filesize,directory="/home/gxslzy/" size=547754993374
filesize,directory="/home/mysql/" size=209941368
filesize,filename="/home/dirsize/logs.log" size=36506
filesize,filename="/home/gxslzy/7111-bhhc/nohup2022-05-05.out" size=25968922
#查看日志
[root@localhost dirsize]# vim logs.log
2022-04-29 16:14:35,071 - INFO: 进入初始化方法……
2022-04-29 16:14:35,071 - INFO: 初始化目录路径:['/home/gxslzy/', '/home/mysql/', '/asdfas/']
2022-04-29 16:14:35,071 - INFO: 正在计算目录大小……
2022-04-29 16:14:35,646 - WARNING: 已采集---监控项名称:filesize 采集目录:"/home/gxslzy/" 大小:547754993374kb
2022-04-29 16:14:35,653 - WARNING: 已采集---监控项名称:filesize 采集目录:"/home/mysql/" 大小:209941368kb
2022-04-29 16:14:35,654 - ERROR: 目录'/asdfas/'不存在 #如果配置了错误的目录路径,日志会抛出异常

2.配置telegraf

[root@localhost telegraf]# vim telegraf.conf
#新增
[[inputs.exec]]
  commands = ["python3 /home/dirsize/directory_size.py",] #配置运行python启动的路径
  timeout = "10s" #表示每间隔几秒执行一个脚本采集,建议不低于10秒
  name_suffix = "_exec"
  data_format = "influx"
:wq #保存退出
##重启
[root@localhost telegraf]# systemctl restart telegraf

web页面查看

常见问题:如果你重启了一段时间后,“对象视角”里迟迟没有自定义的监控项,需要重启一下n9e的server和webapi

在“即时查询”中,可以看到我们脚本采集到的目录和大小。

**值得注意的是,目录大小的单位我们采集的是kb单位,这样夜莺才能兼容展示

接下来,配置一个大盘,看下最终效果

可以看到,简单的效果就出来了,细心的朋友可以发现,默认配置好以后采取的大小和实际服务器中查看到后是有些出入的,我们可以这样优化一下大盘配置

 

如上图所示,左边的是注释,右边的单位一定要选择IEC算法类型,确保脚本算出来的值能和夜莺进行兼容同步

采集文件的方式和目录的基本相同,唯一改变的地方是PromQL中筛选的键为filename,而不是directory 

二、python代码

config.py

  1. #!/usr/bin/python3
  2. #!encoding=utf-8
  3. '''
  4. 作者:陈浩
  5. 更新日期:2022.5.5
  6. 名称:配置被采集的目录与文件路径
  7. '''
  8. #Path字段;采集目录的绝对路径,格式:'绝对路径',结尾加"/"
  9. #filename字段;采集文件的绝对路径,格式:'文件的绝对路径'
  10. Path = [
  11. '/home/deploy/forestar_bs_chenhao/',
  12. '/home/deploy/sclzz_lx/',
  13. '/usr/local/'
  14. ]
  15. filename = [
  16. '/home/dirsize/logs.log',
  17. '/home/gxslzy/7111-bhhc/nohup2022-05-05.out'
  18. ]

directory_size.py

  1. #!/usr/bin/python3
  2. #!encoding=utf-8
  3. '''
  4. 作者:陈浩
  5. 更新日期:2022.5.5
  6. 名称:采集目录与文件大小
  7. '''
  8. import os
  9. import re
  10. import os.path
  11. import logging
  12. import config
  13. logging.basicConfig(level=logging.DEBUG, filename=os.path.abspath(os.path.dirname(__file__)) + '/logs.log',
  14. filemode='a', format='%(asctime)s - %(levelname)s: %(message)s')
  15. class DirectorySize:
  16. """获取目录大小的类"""
  17. def __init__(self, Path, filename):
  18. """初始化方法"""
  19. self.path = Path
  20. self.filename = filename
  21. logging.info("进入初始化方法……")
  22. logging.info("初始化目录路径:{}".format(self.path))
  23. logging.info("初始化文件路径:{}".format(self.filename))
  24. def get_size(self):
  25. """获取目录大小的方法"""
  26. logging.info("正在计算目录大小……")
  27. i = []
  28. for i in self.path:
  29. if not os.path.exists(i):
  30. logging.error("目录'%s'不存在"%i)
  31. else:
  32. os.chdir(i)
  33. change = os.getcwd()
  34. sizes = os.popen("du -b --max-depth=0 | awk '{print $1}'")
  35. sizes = sizes.read().strip()
  36. num = int("".join(map(str, sizes)))
  37. logging.warning('已采集---监控项名称:filesize 采集目录:"{0}" 大小:{1}b'.format(i, num))
  38. print('filesize,directory="{0}" size={1}'.format(i, num))
  39. logging.info("采集目录完毕")
  40. def get_file_size(self):
  41. """获取文件大小的方法"""
  42. logging.info("正在计算文件大小……")
  43. i = []
  44. for i in self.filename:
  45. filepath = os.path.dirname(i)
  46. if not os.path.exists(filepath):
  47. logging.error("目录'%s'不存在"%filepath)
  48. else:
  49. filename = os.path.basename(i)
  50. os.chdir(filepath)
  51. files = os.popen("du -b %s | awk '{print $1}'"%filename)
  52. files = files.read().strip()
  53. logging.warning('已采集---监控项名称:filesize 采集文件:"{0}" 大小:{1}b'.format(filepath + '/' + filename, files))
  54. print('filesize,filename="{0}" size={1}'.format(filepath + '/' + filename, files))
  55. logging.info("采集文件完毕")
  56. if __name__ == '__main__':
  57. """主程序"""
  58. dirsize = DirectorySize(config.Path, config.filename)
  59. dirsize.get_size()
  60. dirsize.get_file_size()

目录结构如下:

 希望能给到你帮助

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/158704
推荐阅读
相关标签
  

闽ICP备14008679号