码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Prometheus metrics数据抓取解析


    Prometheus node的监控数据如链接展示,我们希望能更加方便的看到监控数据,shodan对Prometheus metrics 的数据做了格式化处理。172.96.3.215:9100/metricsicon-default.png?t=N7T8http://172.96.3.215:9100/metrics

     本文我自己实现了一个命令行工具,可以输出类shodan数据格式监控数据。以下是代码示例

    1. // ExtractMsg 提取信息
    2. /*
    3. 1.node_dmi_info
    4. 2.node_exporter_build_info
    5. 3.node_network_info
    6. 4.node_os_info
    7. 5.node_uname_info
    8. 按照顺序从前到后寻找
    9. */
    10. func ExtractMsg(resp string) {
    11. //(1)提取node_dmi_info信息的子串
    12. tmpindex := 0
    13. dmiResult, dmiEndindex := common(resp, "node_dmi_info{")
    14. tmpindex += dmiEndindex
    15. //(2)提取node_exporter_build_info信息的子串
    16. buildResult, buildEndindex := common(resp[tmpindex:], "node_exporter_build_info{")
    17. tmpindex += buildEndindex
    18. networkStartIndex := tmpindex
    19. //(3)提取node_os_info信息的子串
    20. osResult, osEndindex := common(resp[tmpindex:], "node_os_info{")
    21. tmpindex += osEndindex
    22. // 提取node_network_info信息的子串,特殊模块
    23. network(resp[networkStartIndex:], "node_network_info{")
    24. //(4)提取node_uname_info信息的子串
    25. unameResult, _ := common(resp[tmpindex:], "node_uname_info{")
    26. // 逐个序列化
    27. json.Unmarshal([]byte(dmiResult), &prometheus.NodeDmiInfo)
    28. json.Unmarshal([]byte(buildResult), &prometheus.NodeExporterBuildInfo)
    29. json.Unmarshal([]byte(osResult), &prometheus.NodeOsInfo)
    30. json.Unmarshal([]byte(unameResult), &prometheus.NodeUnameInfo)
    31. }
    32. // common 公共模块
    33. func common(resp, findstr string) (result string, endIndex int) {
    34. startIndex := strings.Index(resp, findstr)
    35. // 找不到的情况
    36. if startIndex == -1 {
    37. return "", 0
    38. }
    39. endIndex = strings.Index(resp[startIndex:], "} 1")
    40. endIndex = endIndex + startIndex + 1
    41. // 提取子串的内容
    42. result = strings.ReplaceAll(resp[startIndex+len(findstr)-1:endIndex], "=", ":")
    43. re := regexp.MustCompile(`(\w+):([^,]+)`)
    44. result = re.ReplaceAllString(result, `"$1":$2`)
    45. return
    46. }
    47. // network 单独的网络模块
    48. func network(resp, findstr string) {
    49. count := strings.Count(resp, findstr)
    50. prometheus.NodeNetworkInfo = make([]Response.NodeNetworkInfo, count)
    51. //找到第一个开始位置
    52. startIndex := strings.Index(resp, findstr)
    53. for i := 0; i < count; i++ {
    54. //找到结束位置
    55. endIndex := strings.Index(resp[startIndex:], "} 1")
    56. //算出结束位置
    57. endIndex = endIndex + startIndex + 1
    58. // 提取子串的内容
    59. result := strings.ReplaceAll(resp[startIndex+len(findstr)-1:endIndex], "=", ":")
    60. // 把多余的部分截掉,使其可以被反序列化为对象
    61. result = strings.TrimLeft(result, "nfo")
    62. // 正则并且加引号,使其称为JSON格式
    63. re := regexp.MustCompile(`(\w+):([^,]+)`)
    64. result = re.ReplaceAllString(result, `"$1":$2`)
    65. // 反序列化
    66. err := json.Unmarshal([]byte(result), &prometheus.NodeNetworkInfo[i])
    67. if err != nil {
    68. panic(err)
    69. }
    70. startIndex = endIndex
    71. }
    72. }

    效果如下:

     

     完整代码详见GitHub

    FrankZhang63/Promethues: Promethues metrics 类shodan数据格式 (github.com)

  • 相关阅读:
    【数据结构】树与二叉树(五):二叉树的顺序存储(初始化,插入结点,获取父节点、左右子节点等)
    圆满收官,百花齐放!2022企业级低代码应用大赛获奖结果公布
    qt中加载qss样式不生效的问题
    【回溯算法】leetcode 51. N 皇后
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-5-元素定位大法-上篇
    KEPServerEX 6 之 高级标签插件 Advanced Tags 中文说明(完整版)
    【Dart】004-流程控制
    详解 canal 同步 MySQL 增量数据到 ES
    工作常用sql 总结-长期更新
    【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token
  • 原文地址:https://blog.csdn.net/qq_67503717/article/details/133912191
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号