Nightingle夜莺Docker版SNMP监控

起因

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

安装与配置

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

使用VictoriaMetrics

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

后面启动后修改数据源:
Nightingle夜莺Docker版SNMP监控_第1张图片

添加好数据源后,看下是否正常:
时序指标随便敲敲看有没指标
Nightingle夜莺Docker版SNMP监控_第2张图片
看到有指标我很自信的说成了。

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

Nightingle夜莺Docker版SNMP监控_第3张图片
使用内置的展示仪表盘美滋滋。

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的。

然后在界面查询指标:
Nightingle夜莺Docker版SNMP监控_第4张图片
都有了,那么也就是我的折腾是有效的。

进行调整

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

进入源码目录:
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配置还是需要看官方文档了。

完结

祝好~

你可能感兴趣的:(监控,Docker,Prometheus,docker,容器,运维,prometheus,grafana)