dj-wasabi.telegraf
dj-wasabi.telegraf
- dj-wasabi.telegraf
ビルドステータス:
この役割はTelegrafをインストールして設定します。
Telegrafは、Goで書かれたエージェントで、実行しているシステムや他のサービスからメトリクスを収集し、InfluxDBに書き込みます。
デザイン目標は、メモリの使用量を最小限に抑え、プラグインシステムを備えて、コミュニティの開発者が有名なサービス(Hadoop、Postgres、Redisなど)やサードパーティのAPI(Mailchimp、AWS CloudWatch、Google Analyticsなど)からメトリクスを簡単に収集できるようにすることです。
(https://github.com/influxdb/telegraf)
要件
サポートされているシステム
この役割は以下のシステムをサポートしています:
- Red Hat
- Debian
- Ubuntu
- Docker コンテナ
- (Open)Suse
- Windows(最善を尽くします)
- FreeBSD(最善を尽くします)
- Archlinux(「オンライン」モードのみ)
そのため、これらのシステムのいずれかが必要です.. :-) 他のシステムでこの役割を使用する際は、プルリクエストや提案を送信してください。
InfluxDB
ネットワーク上のどこかでInfluxDBインスタンスが実行されている必要があります。または、https://github.com/influxdata/telegraf/#output-pluginsで見つかる他の出力タイプのいずれかが必要です。
Docker
ターゲットホストにDockerがインストールされている必要があります。Dockerをインストールするために以下の役割をお勧めします:
この設定は、Dockerコンテナ内にTelegrafが必要な場合のみ必要です(telegraf_agent_docker: True
)。
アップグレード
0.7.0
問題がありました:
telegraf_plugins_extraを設定し、ansibleを実行し、プラグインを削除して再度ansibleを実行すると、プラグインがマシンに残ります。
役割変数
Ansible 役割固有の変数
インストールするバージョンを指定します:
telegraf_agent_version
: インストールするTelegrafのバージョン。telegraf_agent_package_state
がlatest
に設定されている場合、このプロパティと値は無視されます。デフォルト値:1.10.0
Telegrafをターゲットホストにインストールする必要があります。インストール方法は次の4つです:
- パッケージマネージャを使って(
yum
、apt
、zypper
など)("repo"); https://dl.influxdata.com/
からダウンロードする("online");- 提供されていて、ターゲットホストに既に存在しますが、まだインストール/設定されていない場合("offline");
- ターゲットホストに既にインストールされているか、手動で実行されているが、まだ設定されていない場合("manual");
これは、telegraf_agent_package_method
を適切な値(repo
、online
、offline
、またはmanual
)に設定することで構成できます。
Telegraf パッケージ
これらのプロパティは、どのように何のパッケージをインストールするかを設定します。
telegraf_agent_package
: インストールするTelegrafパッケージの名前。telegraf_agent_package_method
がonline
またはoffline
に設定されている場合、ファイルのフルパスを指定する必要があります。例:telegraf_agent_package: /tmp/telegraf.rpm
。デフォルト:telegraf_agent_package: telegraf
。telegraf_agent_package_method
: 使用されるインストール方法。選択肢:repo
、offline
またはonline
。telegraf_agent_package_state
: パッケージがpresent
またはlatest
であるべきかどうか。latest
に設定すると、telegraf_agent_version
は無視されます。デフォルト:present
Telegraf エージェントプロセスの設定
telegraf_agent_interval
: サーバーにデータを送信するための間隔。デフォルト:10
telegraf_agent_debug
: Telegrafをデバッグモードで実行します。デフォルト:False
telegraf_agent_round_interval
: 集計間隔を「interval」に丸めます。デフォルト: Truetelegraf_agent_flush_interval
: すべての出力のデフォルトデータフラッシュ間隔。デフォルト: 10telegraf_agent_flush_jitter
: フラッシュ間隔をランダムに変更します。デフォルト: 0telegraf_agent_aws_tags
: AWS EC2タグをTelegrafタグセクションに設定します。デフォルト:False
telegraf_agent_aws_tags_prefix
: AWS EC2タグのプレフィックスを定義します。デフォルト:""
telegraf_agent_collection_jitter
: ランダムに収集を変更します。デフォルト: 0(v0.13以降)telegraf_agent_metric_batch_size
: エージェントメトリックのバッチサイズ。デフォルト: 1000 (v0.13以降)telegraf_agent_metric_buffer_limit
: エージェントメトリックバッファ制限。デフォルト: 10000 (v0.13以降)telegraf_agent_quiet
: Telegrafを静かモードで実行します(エラーメッセージのみ)。デフォルト:False
(v0.13以降)telegraf_agent_logfile
: エージェントのログファイル名。デフォルト: ''(stdoutにログを出力することを意味します)(v1.1以降)telegraf_agent_hostname
: エージェントのホスト名。デフォルト:ansible_fqdn
telegraf_agent_omit_hostname
: エージェントに「host」タグを設定しません。デフォルト:False
(v1.1以降)
Docker 固有の役割変数:
telegraf_agent_docker
: TelegrafをDockerコンテナとしてインストールします。デフォルト:False
telegraf_agent_docker_name
: Dockerコンテナの名前。デフォルト:telegraf
telegraf_agent_docker_network_mode
: Dockerコンテナのネットワークモード。デフォルト:bridge
telegraf_agent_docker_restart_policy
: Dockerコンテナの再起動ポリシー。デフォルト:unless-stopped
telegraf_agent_docker_image_version
: 使用するDocker Telegrafイメージのバージョン。デフォルト値はtelegraf_agent_version
に指定された値を含みます。latest
に設定することで、提供されたDockerイメージの最新のタグを取得できます。telegraf_uid_docker
: ユーザーIDをオーバーライドします。デフォルト:995
telegraf_gid_docker
: グループIDをオーバーライドします。デフォルト:998
エージェント設定の完全なリファレンス: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration。
追加情報
ansible_fqdnがホスト名の取得に問題を引き起こす
ansible_fqdnがホスト名の取得に問題を引き起こす件に関する追加情報 #105
バグの説明
一部のノードでは、主にlocalhost.localdomainのような奇妙なホスト名を受け取っています。それらのノードはhostnamectlで適切に設定されています。「ansible_fqdn」をデフォルトとして使用していることを確認しました。
ansible_fqdnとansible_hostnameが異なる結果を返し、時には非常に奇妙な結果となる場合があるようです。時には、DNS呼び出し(これらの場合は私の制御下にはありません)を行って名前を推測することがあります。
修正提案
私のプレイブックに次のパラメータを追加しました:
telegraf_agent_hostname: "{{ ansible_nodename }}"
タグの設定
Telegrafを実行しているホストのタグを設定できます:
telegraf_global_tags:
- tag_name: some_name
tag_value: some_value
出力を指定します。デフォルトはlocalhostに設定されていますので、正しいInfluxDBサーバーを指定してください:
telegraf_agent_output:
- type: influxdb
config:
- urls = ["http://localhost:8086"]
- database = "telegraf"
tagpass:
- cpu = ["cpu0"]
設定は1行ずつ構成に印刷されるため、次のように使うこともできます。
config:
- # ドキュメンテーション行を印刷
そうすると、設定ファイルに印刷されます。
Dockerに関する特記事項
Docker イメージ
公式のInfluxdata Telegrafイメージが使用されます。telegraf_agent_version
はイメージタグに変換されます。
Docker マウント
Dockerコンテナは、基本的にホストシステム全体(読み取り専用)をマウントして、コンテナ内からDockerエンジンホストを監視します。具体的には:
- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro
詳しい情報: https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md。
Docker設定の例
telegraf_agent_docker: True
# ホストネットワーキングモードを強制し、Dockerエンジンホストのトラフィックメトリクスを収集します。
telegraf_agent_docker_network_mode: host
# 特定のイメージタグを強制します。
telegraf_agent_version: 1.10.0-alpine
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
tagpass:
- fstype = [ "ext4", "xfs" ]
tagdrop:
- path = [ "/etc", "/etc/telegraf", "/etc/hostname", "/etc/hosts", "/etc/resolv.conf" ]
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
- plugin: processes
- plugin: docker
config:
- endpoint = "unix:///var/run/docker.sock"
- timeout = "5s"
Windows 固有の変数
注意
_ Windowsのサポートは最善を尽くします(様々なWindowsインスタンスでの変更をテスト/確認する手段がありません)。Windowsに特化したPRは、誰かがプルリクエストのためにWindowsのテストメカニズムを提供できるまで、ほとんど即座にマージされます。_
telegraf_win_install_dir
: Telegrafがインストールされるディレクトリ。telegraf_win_logfile
: Telegrafのログファイルの場所。telegraf_win_include
: プラグイン設定を含むディレクトリ。
openSUSE 固有の変数
telegraf_zypper_baseurl
: TelegrafをホストするopenSUSEリポジトリのURL(例えば、openSUSE Leapの場合: "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Leap_{{ ansible_distribution_version }}/")。これが指定されていない場合、デフォルトリポジトリが使用されます。
MacOS 固有の変数
注意
MacOSサポートもWindowsサポートと同様に最善を尽くしますが、正式にはサポートされていません。
telegraf_mac_user
: Telegrafはこのユーザーとして実行されます(brewを使用して他のユーザーとして実行するのは問題があります)。
追加情報
似たような2つのプロパティがありますが、異なる目的で使用されます:
telegraf_plugins_default
telegraf_plugins_extra
telegraf_plugins_default
telegraf_plugins_default
プロパティを使用して、Telegrafプラグインのデフォルトセットを使うように設定します。デフォルトで有効にすべき追加のプラグインで上書きできます。
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
すべてのTelegrafエージェントには、これらがデフォルト設定として含まれています。
telegraf_plugins_extra
2番目のパラメーターであるtelegraf_plugins_extra
は、サーバーの目標に特有のプラグインを追加するために使用できます。リストの代わりにハッシュを使用して、複数の変数ファイルから値をマージできます。以下は、MySQLデータベースサーバー用にこのパラメーターを使用する例です:
cat group_vars/mysql_database
telegraf_plugins_extra:
mysql:
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
この場合、telegraf_plugins_extra_exclusive
変数を使用して、プレイブックによって生成されていないextra-pluginファイルを/etc/telegraf/telegraf.dから削除するオプションがあります。
Telegrafプラグインオプション:
tags
: 特定の入力の測定に適用するk/vタグです。フィルタリングを強化するために、出力の段階で使用できます。tagpass
:(Telegraf 0.1.5以降で追加)メトリクスを現在のプラグインでフィルタリングするために使用されるタグ名と文字列の配列です。配列内の各文字列は、タグ名と正確に一致するかどうかがテストされ、一致すればメトリックは発出されます。tagdrop
:(Telegraf 0.1.5以降で追加)tagpassの逆。タグが一致する場合、メトリックは発出されません。これは、tagpassテストを通過したメトリックスに対してテストされます。interval
: このメトリックをどれくらいの頻度で収集するかを設定します。通常のプラグインは単一のグローバル間隔を使用しますが、特定のプラグインを多くまたは少なく実行する必要がある場合、ここで設定できます。filter.name
:logparser
プラグインのgrok
のような特別なフィルターが必要な場合の設定です。filter.config
:filter.name
の例のための追加設定です。(以下の例を参照)sub_inputs
: 入力が他のサブ入力を必要とする場合、ここに追加できます(以下の例を参照)。
例は次のようになります:
telegraf_plugins_default:
- plugin: disk
interval: 12
tags:
- diskmetrics = "true"
tagpass:
- fstype = [ "ext4", "xfs" ]
- path = [ "/opt", "/home" ]
処理器を定義したい場合は、telegraf_processors
変数を使用するだけで済みます。
例は以下のようになります:
telegraf_processors:
- processor: rename
- processor: rename.replace
config:
- tag = "level"
- dest = "LogLevel"
logparserのgrok
フィルターを使用する場合:
telegraf_plugins_extra:
logparser:
plugin: logparser
config:
- files = ["/var/log/messages"]
- from_beginning = false
filter:
name: grok
config:
- patterns = ["invoked oom-killer"]
独自の設定を持つサブ入力を含めたい場合は次のようにします:
sqs:
plugin: cloudwatch
config:
- region = "eu-west-1"
- access_key = "foo"
- secret_key = "bar"
- period = "1m"
- delay = "2m"
- interval = "1m"
- namespace = "AWS/SQS"
- statistic_include = ["average"]
sub_inputs:
metrics:
- names = [
"ApproximateAgeOfOldestMessage",
"ApproximateNumberOfMessagesVisible",
]
metrics.dimensions:
- name = "QueueName"
- value = "*"
依存関係
依存関係はありません
サンプルプレイブック
- hosts: servers
roles:
- { role: dj-wasabi.telegraf }
Molecule
この役割はMoleculeでテストするように設定されています。このページでMoleculeに関する詳細情報を見つけることができます: https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/
ライセンス
BSD
著者情報
問題があればお知らせください。プルリクエストも受け付けています! :-)
メール: ikben [ at ] werner-dijkerman . nl
ansible-galaxy install dj-wasabi.telegraf