Nightingle夜莺Docker版SNMP监控

news/2024/5/18 23:41:13 标签: docker, 容器, 运维, prometheus, grafana

起因

对夜莺很感兴趣,想使用一下。我看官方提供了v6版本的docker-compose。而且我之前有使用过promtheus和grafana,虽然很好但是总觉得还是得二开。总有一天有人去搞一个不错的玩意儿出来。官方文档地址

安装与配置

直接运行docker版本的demo,启动后,我发现有prometheus和categraf。但我想根据官方文档使用VictoriaMetrics单机版本。

使用VictoriaMetrics

我在compose中去掉了prometheus,然后在主机安装了VictoriaMetrics。我没用在compose中添加,我懒改了。直接看官当文档多香。

后面启动后修改数据源:
ZviA7j7

添加好数据源后,看下是否正常:
时序指标随便敲敲看有没指标
WxPg5Rs
看到有指标我很自信的说成了。

后面我加了两个Ping,发现可以没问题的。

JoY5v64
使用内置的展示仪表盘美滋滋。

SNMP部分

之后我想测试SNMP部分,这是我工作需要的内容。

首先默认的官方demo没有提供相关categraf插件配置。他的插件都是在github上面的。下载一份放到demo的categraf/conf目录下。
我的路径: home/xxx/nightingate/docker/categraf/conf

我这里用到snmp, 就拷贝input.snmp 这个目录到上面路径内。

进入这个input.snmp,里面有两个文件,一个 snmp.toml另一个是snmp.toml.example 。实际使用的是第一个,在里面编辑内容:

[[instances]]
  agents = ["udp://10.10.10.2:161"]
  timeout = "5s"
  version = 2
  path = ["/usr/share/snmp/mibs"]
  community = "public"
  agent_host_tag = "switch"
  retries = 1

[[instances.field]]
  oid = ".1.3.6.1.2.1.1.3.0"
  name = "uptime"

[[instances.field]]
  oid = ".1.3.6.1.2.1.1.5.0"
  name = "source"
  is_tag = true

[[instances.table]]
  oid = "IF-MIB::ifTable"
  name = "interface"
  inherit_tags = ["source"]
  index_as_tag = true
  include_filter = ["ifIndex:2","ifIndex:4"]

[[instances.table.field]]
  oid = "IF-MIB::ifDescr"
  name = "ifDescr"
  is_tag = true
[[instances.table.field]]
  oid = "IF-MIB::ifPhysAddress"
  name = "ifPhysAddress"
  is_tag = true

遇到问题

保存重启categraf后,我只看到了一个指标snmp_uptime。我单独取uptime这个是有的,就好像没办法执行snmpwalk 只能搞snmpget

通过docker log我看到categraf中关于snmp部分报错:
metrics_agent.go:255: E! failed to init input: local.snmp error: initializing table interface ins: translating: exec: “snmptranslate”: executable file not found in $PATH

我开始以为是没有mibs文件导致的,所以我在docker-compose.yaml中挂在了宿主机的mibs。结果是重启categraf无效。

我问了下GPT这句话怎么肥事,回答内容:
这个错误信息表明 Nightingale 监控软件在尝试初始化 SNMP 输入时遇到了问题。具体来说,它无法找到名为 “snmptranslate” 的可执行文件。

看这个名字大概就知道,他主要功能是翻译转换吧。大概就是MIB和OID的关系了。这部分内容建议看看SNMP的一些内容。n9e官方提供了一些相关内容:SNMP插件

好,既然我知道是缺少这个,我就进到容器里去看看,果然没有,算你蒙对了。我就自己安装一个吧,在容器内安装命令:
sudo apt updatesudo apt install snmp,这个容器进来就是root,所以直接装就好了。装好之后,重启categraf果然错误变了:
metrics_agent.go:255: E! failed to init input: local.snmp error: initializing table interface ins: translating: Created directory: /var/lib/snmp/cert_indexes /usr/share/snmp/mibs/iana: No such file or directory /usr/share/snmp/mibs/ietf: No such file or directory MIB search path: /root/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf Cannot find module (IF-MIB): At line 1 in (none) IF-MIB::ifTable: Unknown Object Identifier: exit status 2

这个意思大概是他没找到MIB文件。我可能挂载有问题吧,既然这样我就直接在容器折腾了,apt-get install snmp-mibs-downloader, 装完之后需要创建一个目录~/.snmp,并在这目录中创建一个snmp.conf,文件内容:mibs +ALL

之后我手动执行了categraf test参数,来直接测试snmp部分内容。 容器内部执行 /usr/bin/categraf --configs /etc/categraf/conf --test --inputs snmp如果执行没出现任何error,应该是ok的。

然后在界面查询指标:
7pJEHsWon2ICvri
都有了,那么也就是我的折腾是有效的。

进行调整

整理上面的操作,我们需要对原来的镜像进行调整,所以我拉取他的代码,在上面进行魔改。

进入源码目录:
RQgBBdl
可以看到他的DockerFile是在docker目录下。

FROM ubuntu:22.10

RUN echo 'hosts: files dns' >> /etc/nsswitch.conf

RUN set -ex && \
    mkdir -p /usr/bin /etc/categraf 

COPY categraf  /usr/bin/categraf

COPY conf /etc/categraf/conf

COPY entrypoint.sh /entrypoint.sh

CMD ["/entrypoint.sh"]

简单明了,把程序搞过来,配置搞过来完事了,那我加上相关snmp部分配置就好啦。

先把go程序编译放到此目录,然后我看copy一个conf目录,但是我在使用官方demo都是挂在宿主机上的conf,所以这里我给他一个空conf就好啦。docker目录下创建一个conf。在RUN命令加入安装SNMP命令。

#最终魔改后
FROM ubuntu:22.10

RUN echo 'hosts: files dns' >> /etc/nsswitch.conf \
    && apt-get update \
    && apt-get install -y snmp snmp-mibs-downloader \
    && mkdir -p ~/.snmp \
    && echo "mibs +ALL" > ~/.snmp/snmp.conf \
    && apt-get clean

RUN set -ex && \
    mkdir -p /usr/bin /etc/categraf

COPY categraf  /usr/bin/categraf

COPY conf /etc/categraf/conf

COPY entrypoint.sh /entrypoint.sh

CMD ["/entrypoint.sh"]

最后docker build 一个镜像。使用魔改后的就不需要再折腾容器了。

如果你还是想体验夜莺SNMP相关,又不想自己build呢?
没问题用我的这个镜像地址来拉取替换官方版本体验SNMP。

在夜莺demo中修改docker-compose.yaml

...
services:
  ...
  categraf:
    image: "chenwl2016/categraf:0.3.16"
    ulimits:
      nofile:
        soft: 8192
        hard: 8192
    cap_add:
      - NET_RAW
    cap_drop:
      - NET_RAW
    container_name: "categraf"
    hostname: "categraf01"
    restart: always
    environment:
      TZ: Asia/Shanghai
      HOST_PROC: /hostfs/proc
      HOST_SYS: /hostfs/sys
      HOST_MOUNT_PREFIX: /hostfs
    volumes:
      - ./categraf/conf:/etc/categraf/conf
      - /:/hostfs
      - /var/run/docker.sock:/var/run/docker.sock
    network_mode: host
    depends_on:
      - n9e
      - ibex
...

最终docker版本的SNMP监控可以使用了。具体SNMP配置还是需要看官方文档了。

完结

祝好~


http://www.niftyadmin.cn/n/478871.html

相关文章

DFT设计中相关词汇

1.Automatd Test Equipment(ATE) 自动测试和分析功能参数的设备,以此来评估被测试的电子设备的性能。 2.Automatic Test Pattern Generator(ATPG) program生成的一种process,要求test patterns为设计产生高故障覆盖率。 3.Blackbox 不存在的instanc…

FreeRTOS学习笔记—基础知识

文章目录 一、什么是RTOS二、前后台系统三、实时内核(可剥夺型内核)四、RTOS系统五、FreeRTOS系统简介六、FreeRTOS源码下载 一、什么是RTOS RTOS全称为:Real Time OS,就是实时操作系统,核心在于实时性。实时操作系统又分为硬实时…

【SaaS】多租户系统设计

文章目录 多租户系统设计一、SaaS 的系统分级二、应用程序必须支持多租户三、数据隔离方案3.1、独立应用独立库3.2、同一个应用程序,每个租户一个库3.3、同一个应用程序,同一个数据库3.4、分片多租户 四、我们的模型选择4.1、开发实践4.2、元数据/配置驱…

Android下载到本地 系统相机扫描到本地相册问题处理

1、申请文件读写权限(可自己写,可使用第三方) 2、在指定目录下创建一个.nomedia文件,注:是文件,不是文件夹 3、.nodedia文件创建好之后需要重启一下系统,之后再进相册就不会显示出该目录下的图片…

实现一个转盘随机选择器

实现效果 完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title><…

Android 编译Android7.0版本源码

编译Android7.0版本源码 前言正文一、前置条件二、编译准备三、下载编译源码1. 下载Repo2. 初始化仓库3. 同步远程代码4. 编译源码5. 启动模拟器 四、编译中的问题① Jack-Server② 本地化设置③ Communication error with Jack server (35), try jack-diagnose or see Jack se…

Windows服务器部署项目自启动

1.下载jar包 https://github.com/kohsuke/winsw 2.重命名 3. 编辑xml文件 <configuration> <id>MyApp</id> <name>MyApp</name> <description>This is MyApp.</description><executable>java</executable> <argum…

华为云obs桶授权

登录华为云控制台 https://auth.huaweicloud.com/authui/login.html?servicehttps://console.huaweicloud.com/console/#/login 进入并行文件系统页面 进入桶 添加ACL授权,填写被授权账号ID,点击确定即可