原因
对夜莺很感兴趣,想运用一下。我看官方供给了v6版别的docker-compose。并且我之前有运用过promtheus和grafana,尽管很好可是总觉得仍是得二开。总有一天有人去搞一个不错的玩意儿出来。官方文档地址
装置与装备
直接运行docker版别的demo,发动后,我发现有prometheus和categraf。但我想根据官方文档运用VictoriaMetrics单机版别。
运用VictoriaMetrics
我在compose中去掉了prometheus,然后在主机装置了VictoriaMetrics。我没用在compose中增加,我懒改了。直接看官当文档多香。
后边发动后修正数据源:
增加好数据源后,看下是否正常: 时序目标随意敲敲看有没目标 看到有目标我很自傲的说成了。
后边我加了两个Ping,发现能够没问题的。
运用内置的展示仪表盘乐滋滋。
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 update
,sudo 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的。
然后在界面查询目标: 都有了,那么也便是我的折腾是有用的。
进行调整
整理上面的操作,咱们需求对本来的镜像进行调整,所以我拉取他的代码,在上面进行魔改。
进入源码目录: 能够看到他的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装备仍是需求看官方文档了。
完结
祝好~