【发布时间】:2021-06-22 20:05:50
【问题描述】:
我正在尝试将嵌套列表传递到 jinja 中,以使用 SNMP 输入插件为 Telegraf 创建配置文件。
到目前为止,我已经能够将以下简单列表解析为合适的配置文件。
列表:
- name: CpuUsage
oid: 1.3.6.1.4.1.5951.4.1.1.41.1.0
- name: mgmt_CPU
oid: 1.3.6.1.4.1.5951.4.1.1.41.6.1.2.8.77.103.109.116.32.67.80.85
- name: MemUsage
oid: 1.3.6.1.4.1.5951.4.1.1.41.2.0
- name: TotRxMbits
oid: 1.3.6.1.4.1.5951.4.1.1.43.27.0
- name: TotTxMbits
oid: 1.3.6.1.4.1.5951.4.1.1.43.30.0
- name: httpTotRequestsRate
oid: 1.3.6.1.4.1.5951.4.1.1.48.76.0
- name: tcpCurClientConnEstablished
oid: 1.3.6.1.4.1.5951.4.1.1.46.12.0
- name: tcpCurServerConnEstablished
oid: 1.3.6.1.4.1.5951.4.1.1.46.10.0
- name: tcpCurClientConnClosing
oid: 1.3.6.1.4.1.5951.4.1.1.46.9.0
进入以下配置:
[[inputs.snmp.field]]
name = "CpuUsage"
oid = "1.3.6.1.4.1.5951.4.1.1.41.1.0"
conversion = "int"
[[inputs.snmp.field]]
name = "mgmt_CPU"
oid = "1.3.6.1.4.1.5951.4.1.1.41.6.1.2.8.77.103.109.116.32.67.80.85"
conversion = "int"
[[inputs.snmp.field]]
name = "MemUsage"
oid = "1.3.6.1.4.1.5951.4.1.1.41.2.0"
conversion = "int"
[[inputs.snmp.field]]
name = "TotRxMbits"
oid = "1.3.6.1.4.1.5951.4.1.1.43.27.0"
conversion = "int"
[[inputs.snmp.field]]
name = "TotTxMbits"
oid = "1.3.6.1.4.1.5951.4.1.1.43.30.0"
conversion = "int"
[[inputs.snmp.field]]
name = "httpTotRequestsRate"
oid = "1.3.6.1.4.1.5951.4.1.1.48.76.0"
conversion = "int"
[[inputs.snmp.field]]
name = "tcpCurClientConnEstablished"
oid = "1.3.6.1.4.1.5951.4.1.1.46.12.0"
conversion = "int"
[[inputs.snmp.field]]
name = "tcpCurServerConnEstablished"
oid = "1.3.6.1.4.1.5951.4.1.1.46.10.0"
conversion = "int"
[[inputs.snmp.field]]
name = "tcpCurClientConnClosing"
oid = "1.3.6.1.4.1.5951.4.1.1.46.9.0"
conversion = "int"
我被困在以下列表中
netscaler_citrix_vserver:
- name: name
oid: NS-ROOT-MIB::vsvrName
is_tag: "true"
- name: fullName
oid: NS-ROOT-MIB::vsvrFullName
is_tag: "true"
- name: requests
oid: NS-ROOT-MIB::vsvrTotalRequests
- name: state
oid: NS-ROOT-MIB::vsvrState
- name: servicesUp
oid: NS-ROOT-MIB::vsvrCurServicesUp
netscaler_citrix_vservice:
- name: vserver
oid: NS-ROOT-MIB::vserverFullName
is_tag: "true"
- name: vservice
oid: NS-ROOT-MIB::vsvrServiceFullName
is_tag: "true"
- name: hits
oid: NS-ROOT-MIB::vsvrServiceHits
我尝试了多种变体,但每种变体都失败了。我正在尝试获得以下输出:
[[inputs.snmp.table]]
name = "netscaler_citrix_vserver"
# oid omitted, to allow collection of specific columns only
[[inputs.snmp.table.field]]
name = "name"
oid = "NS-ROOT-MIB::vsvrName"
is_tag = true
[[inputs.snmp.table.field]]
name = "fullName"
oid = "NS-ROOT-MIB::vsvrFullName"
is_tag = true
[[inputs.snmp.table.field]]
name = "requests"
oid = "NS-ROOT-MIB::vsvrTotalRequests"
[[inputs.snmp.table.field]]
name = "state"
oid = "NS-ROOT-MIB::vsvrState"
[[inputs.snmp.table.field]]
name = "servicesUp"
oid = "NS-ROOT-MIB::vsvrCurServicesUp"
[[inputs.snmp.table]]
name = "netscaler_citrix_vservice"
# oid omitted, to allow collection of specific columns only
[[inputs.snmp.table.field]]
name = "vserver"
oid = "NS-ROOT-MIB::vserverFullName"
is_tag = true
[[inputs.snmp.table.field]]
name = "vservice"
oid = "NS-ROOT-MIB::vsvrServiceFullName"
is_tag = true
[[inputs.snmp.table.field]]
name = "hits"
oid = "NS-ROOT-MIB::vsvrServiceHits"
基本上我需要引用顶级条目,并为每个顶级条目列出子级条目。
任何帮助将不胜感激。
用于创建第一个列表的代码非常简单,如下所示:
[[inputs.snmp.field]]
name = "{{ item.name }}"
oid = "{{ item.oid }}"
{% endfor %}
对于 SNMP 表代码,我已采用如下方式显式声明表名:
[[inputs.snmp.table]]
name = "netscaler_citrix_vserver"
{% for item in netscaler_citrix_vserver %}
[[inputs.snmp.table.field]]
name = "{{ item.name }}"
oid = "{{ item.oid }}"
{% if item.is_tag is defined %}
is_tag = {{item.is_tag}}
{% endif %}
{% endfor %}
[[inputs.snmp.table]]
name = "netscaler_citrix_vservice"
{% for item in netscaler_citrix_vservice %}
[[inputs.snmp.table.field]]
name = "{{ item.name }}"
oid = "{{ item.oid }}"
{% if item.is_tag is defined %}
is_tag = {{item.is_tag}}
{% endif %}
{% endfor %}
【问题讨论】:
-
我注意到您的问题中没有您的任何代码。请阅读how to ask 页面,并特别注意MCVE 部分。祝你好运
-
谢谢,为列表添加了我的代码,但我已经为嵌套列表尝试了很多变体,我已经迷失了方向。