0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Telegrafを利用したSNMPデータの収集方法

Last updated at Posted at 2024-08-22

概要

Telegrafにて、SNMPのポーリング及びトラップのデータを収集する手順を記載します。

環境

本記事で取り扱う内容は、次の環境にて確認しています。

  • SNMPエージェント
    マシン:Amazon EC2
    OS:Ubuntu 22.04
  • Telegraf
    マシン:Amazon EC2
    OS:Ubuntu 22.04

SNMPエージェント セットアップ

※SNMPエージェントマシンのインバウンドルールにて、UDP 161 Portを許可して下さい。
ポーリングにて利用するProtocol、Portになります。

次のコマンドで、SNMPエージェントをインストールします。

$ sudo apt-get update

$ sudo apt install snmpd

$ sudo apt install snmp 

※snmp:マネージャ(net-snmp)及び、snmpwalkコマンドなどのツール
※snmpd:エージェント

次に、/etc/snmp/snmpd.confを編集します。

# コミュニティ名を任意の名前に変更します
rocommunity  <任意の名前> default -V systemonly
rocommunity6 <任意の名前> default -V systemonly

# 外部からSNMPの読み取りができるように次の行をコメントアウトして下さい
# agentaddress  127.0.0.1,[::1]

snmpdを再起動し、設定を反映します。

$ sudo systemctl restart snmpd.service

SNMPにてデータが取得できることを確認して下さい。

$ snmpwalk -v2c localhost -c <コミュニティ名>

SNMPエージェントのセットアップは以上となります。

Telegraf セットアップ

※Telegrafマシンにて、SNMP Trapを受けるためのUDP 162 portを許可して下さい。

SNMP関連パッケージをインストールします。

$ sudo apt-get update
$ sudo apt install snmp snmp-mibs-downloader

※ snmp-mibs-downloader:多数の標準MIBがインストールされます。

次に、公式手順に従ってTelegrafをインストールします。

curl -s https://repos.influxdata.com/influxdata-archive_compat.key > influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt-get update && sudo apt-get install telegraf

次に、/etc/telegraf/telegraf.confを編集します。
以下に記載しているのはサンプル例となります。

補足説明
ポーリングのセクションでは、ポーリング対象のマシンごとに[[inputs.snmp]]を分けて記載するのがベストプラクティスとなっています。
こちらにその説明が記載されています。

一方トラップのセクションでは、対象のマシンを記載する必要はありません。


[global_tags]


###############################################################################
#                                 POLLING                                     #
###############################################################################

[agent]
  ## data collection interval for all inputs
  interval = "10s"

  ## Rounds collection interval to 'interval'
  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
  round_interval = true
  
  ## Telegraf will send metrics to outputs in batches of at most
  ## metric_batch_size metrics.
  ## This controls the size of writes that Telegraf sends to output plugins.
  metric_batch_size = 1000
  
  ## Maximum number of unwritten metrics per output.  Increasing this value
  ## allows for longer periods of output downtime without dropping metrics at the
  ## cost of higher maximum memory usage.
  metric_buffer_limit = 10000
  
  ## Collection jitter is used to jitter the collection by a random amount.
  ## Each plugin will sleep for a random time within jitter before collecting.
  ## This can be used to avoid many plugins querying things like sysfs at the
  ## same time, which can have a measurable effect on the system.
  collection_jitter = "0s"
  
  ## Default flushing interval for all outputs. Maximum flush_interval will be
  ## flush_interval + flush_jitter
  flush_interval = "10s"
  
  ## Jitter the flush interval by a random amount. This is primarily to avoid
  ## large write spikes for users running a large number of telegraf instances.
  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
  flush_jitter = "0s"
  
  ## By default or when set to "0s", precision will be set to the same
  ## timestamp order as the collection interval, with the maximum being 1s.
  ##   ie, when interval = "10s", precision will be "1s"
  ##       when interval = "250ms", precision will be "1ms"
  ## Precision will NOT be used for service inputs. It is up to each individual
  ## service input to set the timestamp at the appropriate precision.
  ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
  precision = "0s"
  
  ## Override default hostname, if empty use os.Hostname()
  hostname = ""
  
  ## If set to true, do no set the "host" tag in the telegraf agent.
  omit_hostname = false

# マシン 1の設定
[[inputs.snmp]]
  ## Agent addresses to retrieve values from.
  agents = ["udp://<SNMPポーリング対象のマシンIP>:161"]

  ## Timeout for each request.
  timeout = "5s"

  ## SNMP version; can be 1, 2, or 3.
  version = 2

  ## SNMP community string.
  community = "<コミュニティ名>"

  # 取得対象のOIDを指定(以下は例になります)
  [[inputs.snmp.field]]
    oid = "1.3.6.1.2.1.1.7.0"
    name = "sysServices"

  [[inputs.snmp.field]]
    oid = "1.3.6.1.2.1.1.5.0"
    name = "sysName"

  [[inputs.snmp.field]]
    oid = "1.3.6.1.2.1.1.4.0"
    name = "sysContact"

# マシン 2の設定
[[inputs.snmp]]
  ## Agent addresses to retrieve values from.
  agents = ["udp://<SNMPポーリング対象のマシンIP>:161"]

  ## Timeout for each request.
  timeout = "5s"

  ## SNMP version; can be 1, 2, or 3.
  version = 2

  ## SNMP community string.
  community = "<コミュニティ名>"
  
  ## data collection interval for this device
  interval = "20s"

  # 取得対象のOIDを指定(以下は例になります)
  [[inputs.snmp.field]]
    oid = "1.3.6.1.2.1.1.7.0"
    name = "sysServices"

  [[inputs.snmp.field]]
    oid = "1.3.6.1.2.1.1.5.0"
    name = "sysName"

  [[inputs.snmp.field]]
    oid = "1.3.6.1.2.1.1.4.0"
    name = "sysContact"

###############################################################################
#                                  TRAP                                       #
###############################################################################

[[inputs.snmp_trap]]

###############################################################################
#                            OUTPUT PLUGINS                                   #
###############################################################################

# 外部システムにhttpで送信
[[outputs.http]]
  # URLを設定
  url = "http://<外部システムのIP>:<Port>"
  data_format = "json"
  method = "POST"

[outputs.http.headers]
  # Headerの設定、アクセストークンを設定
  Authorization = "bearer <アクセストークン>"
  Content-Type = "application/json"

次に、SNMP Trapを受信するための162 portを使えるように権限を設定し、Telegrafを起動します。

$ sudo setcap cap_net_bind_service=+ep /usr/bin/telegraf
$ sudo service telegraf start

※CAP_NET_BIND_SERVICE:特権ポート(1~1024番のポート)にソケットをバインドする。

これで、対象マシンへのポーリングと、そのデータの外部システムへのHTTP送信が開始されます。

SNMPトラップの動作を確認したい場合は、以下のLinkdown通知コマンドをSNMPエージェントにて実行すれば確認可能です。

$ snmptrap -v 2c -c <コミュニティ名> <TelegrafマシンのIP> '' .1.3.6.1.6.3.1.1.5.3

【オプション】プライベートMIBを利用する

この記事では標準MIBしか取り扱いませんでした。
プライベートMIBも取り扱いたい場合は、次の記事を参照し追加のセットアップを実施して下さい。
トラップを受ける側、つまりTelegrafマシンにて作業します。

追加セットアップが完了したら、Telegrafを再起動し設定を反映して下さい。

$ sudo service telegraf restart

参考

https://docs.influxdata.com/telegraf/v1/install/
https://www.influxdata.com/blog/telegraf-best-practices-snmp-plugin/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?