原因

对夜莺很感兴趣,想运用一下。我看官方供给了v6版别的docker-compose。并且我之前有运用过promtheus和grafana,尽管很好可是总觉得仍是得二开。总有一天有人去搞一个不错的玩意儿出来。官方文档地址

装置与装备

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

运用VictoriaMetrics

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

后边发动后修正数据源:

Nightingle夜莺Docker版SNMP监控

增加好数据源后,看下是否正常: 时序目标随意敲敲看有没目标

Nightingle夜莺Docker版SNMP监控
看到有目标我很自傲的说成了。

后边我加了两个Ping,发现能够没问题的。

Nightingle夜莺Docker版SNMP监控
运用内置的展示仪表盘乐滋滋。

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监控
都有了,那么也便是我的折腾是有用的。

进行调整

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

进入源码目录:

Nightingle夜莺Docker版SNMP监控
能够看到他的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装备仍是需求看官方文档了。

完结

祝好~