kso512.checkmk_agent
checkmk_agent
Ansibleの役割で、CheckMK RAWエディション用のエージェント/クライアントをインストールします。
これは、CI/CDやAnsible GalaxyとCheckMKの命名規則の変更に伴って、私が長年作成・維持していたinstall-check_mk-agent役割の完全な再構築です。
すべてのタスクにはcheckmk-agent
というタグが付けられています。
以下のディストリビューションは自動的にテストされました:
- Debian 10 "Buster"
- Debian 11 "Bullseye"
- Debian 12 "Bookworm"
- Fedora 38
- Fedora 39
- Fedora 40
- Microsoft Windows Server 2019 / Microsoft Windows 10
- Microsoft Windows Server 2022 / Microsoft Windows 11
- Ubuntu 20.04 LTS "Focal Fossa"
- Ubuntu 22.04 LTS "Jammy Jellyfish"
- Ubuntu 24.04 LTS "Noble Numbat"
パフォーマンスの理由から、Windowsエージェントでは以下の「セクション」がデフォルトで無効になっています:
- services
- msexch
- dotnet_clrmemory
- wmi_webservices
- wmi_cpuload
- ps
- fileinfo
- logwatch
- openhardwaremonitor
さらに、プラグインの実行が調整されました:
- タイムアウトが
30
から120
に引き上げられました - 非同期が有効になりました
- キャッシュ年齢が
3600
(1時間)に設定されました
自分自身の「check_mk.user.yml.j2」を作成し、checkmk_agent_win_config_src
を上書きしてさらにカスタマイズするか、checkmk_agent_win_config_optimize
変数をfalse
に設定してこの最適化を無効にします。
同様の変更がdocker.cfg
のデフォルトファイルにも行われています。ここでは、すべてのdockerセクションが有効になっており、checkmk_agent_docker_complete
変数をfalse
に設定することでデフォルトに戻すことができます。
最近のバージョンマトリックス
CheckMK RAWエディションバージョン | 役割のバージョン/タグ |
---|---|
2.3.0p13 | 1.1.1 |
2.3.0p12 | 1.1.0 |
2.3.0p11 | 1.0.99 |
2.3.0p10 | 1.0.98 |
2.3.0p9 | 1.0.97 |
要件
この役割には他の役割は必要ありません。一般的にCheckMKサーバーと互換性があるように設計されており、特にkso512.checkmk_serverに特化しています。
Windowsリモート管理(WinRM)を使用してWindowsホストに接続する場合、Ansibleシステムにpywinrm
パッケージをインストールする必要があります:
pip install "pywinrm>=0.3.0"
この役割は、Unixタイプのシステムでデフォルトポート6556の代わりにSSHを使用します。これにより通信が暗号化され、新しいポートを開かずに監視と新しいサービスの設定が行えます。
SSHの認証キーを作成するには、こちらに示されているように「ssh-keygen」プログラムを使用します。
ローカルフォルダーにパスフレーズなしでデフォルトのキーを作成する例:
ssh-keygen -C "cmkagent@$HOSTNAME" -f ./id_rsa -N "" -v
これにより、id_rsa
とid_rsa.pub
の2つのファイルが作成されます。
id_rsa
= プライベートキーで、安全に保管する必要があります。このファイルは、アクティブなCheckMKエージェントユーザーの~/.ssh
フォルダーに置く必要があります。次の例は「kso512.checkmk_server」のデフォルトユーザーとサイトを使用しています:
cp ./id_rsa /opt/omd/sites/test/.ssh
id_rsa.pub
= 公開キーで、他の信頼されたホストと共有できます。このファイルは、ローカルの「authorized_keys.j2」ファイルに追加する必要があります。デフォルトの役割構造を仮定して:
echo '# {{ ansible_managed }}' > /etc/ansible/local/authorized_keys.j2
cat ./id_rsa.pub >> /etc/ansible/local/authorized_keys.j2
次に、local/authorized_keys.j2
を自分の変数でcheckmk_agent_authkey_src
として宣言します。以下に例を示します。
最後に、CheckMK自体を設定して、これらのファイルを利用し、TCPポート6556への接続を試みないようにします:
- CheckMKにログインします
- 設定 > 検索 > "個別" > エージェントアクセスの代わりに個別プログラム呼び出し
- フォルダーにルールを作成する:メインディレクトリ
- 説明:
SSHおよびcmkagentアカウントを使用してSSHキーを使う
- 実行するコマンドライン:
ssh -i ~/.ssh/id_rsa -l cmkagent <IP> sudo /home/cmkagent/check_mk_agent
- 明示的ホスト:(テストホストを選択し、それが機能したらホストタグまたはラベルを設定します)
- 保存
- 説明:
- 1つの変更 > 選択したサイトで有効化
役割変数
これらのいくつかは冗長に見えるかもしれませんが、将来のユーザーが必要に応じてローカル変数で上書きできるように指定されています。
変数の表(デフォルト付き)
変数 | 説明 | デフォルト |
---|---|---|
checkmk_agent_authkey_dest | "authorized_keys"ファイルのフルパス | "{{ checkmk_agent_ssh_path }}/authorized_keys" |
checkmk_agent_authkey_group | "authorized_keys"ファイルの所有グループ名 | "{{ checkmk_agent_ssh_group }}" |
checkmk_agent_authkey_mode | "authorized_keys"ファイルのファイルモード設定 | "0600" |
checkmk_agent_authkey_src | "authorized_keys"テンプレートのファイル名 | authorized_keys.j2 |
checkmk_agent_authkey_user | "authorized_keys"ファイルの所有ユーザー名 | "{{ checkmk_agent_ssh_user }}" |
checkmk_agent_cache_group | "cache"フォルダーとファイルの所有グループ名 | "{{ checkmk_agent_cache_user }}" |
checkmk_agent_cache_mode | "cache"フォルダーとファイルのファイルモード設定 | "{{ checkmk_agent_mode }}" |
checkmk_agent_cache_path | "cache"フォルダーのフルパス | "{{ checkmk_agent_home }}/cache" |
checkmk_agent_cache_user | "cache"フォルダーとファイルの所有ユーザー名 | "{{ checkmk_agent_user }}" |
checkmk_agent_comment | CheckMKエージェントユーザーのフルネーム | CheckMK Agent |
checkmk_agent_count_users_crit | ログインユーザー数、クリティカルしきい値 | 15 |
checkmk_agent_count_users_warn | ログインユーザー数、警告しきい値 | 10 |
checkmk_agent_count_zombie_procs_crit | ゾンビプロセス数、クリティカルしきい値 | 10 |
checkmk_agent_count_zombie_procs_warn | ゾンビプロセス数、警告しきい値 | 5 |
checkmk_agent_dest | CheckMKエージェント実行ファイルのフルパス | "{{ checkmk_agent_home }}/check_mk_agent" |
checkmk_agent_docker_complete | すべてのdockerモジュールを含む | true |
checkmk_agent_docker_dest | Docker設定ファイルのフルパス | "{{ checkmk_agent_home }}/docker.cfg" |
checkmk_agent_docker_group | Docker設定ファイルの所有グループ名 | "{{ checkmk_agent_group }}" |
checkmk_agent_docker_mode | Docker設定ファイルのファイルモード設定 | "0644" |
checkmk_agent_docker_src | Docker設定ファイルテンプレートのファイル名 | docker.cfg.j2 |
checkmk_agent_docker_user | Docker設定ファイルテンプレートのファイル名 | "{{ checkmk_agent_user }}" |
checkmk_agent_group | CheckMKエージェント実行ファイルの所有グループ名 | "{{ checkmk_agent_user }}" |
checkmk_agent_home | CheckMKエージェントユーザーのホームフォルダーのフルパス | /home/{{ checkmk_agent_user }} |
checkmk_agent_local_checks | "local"フォルダーにコピーするチェックのリスト | count_users count_zombie_procs |
checkmk_agent_local_checks_async | "local"非同期フォルダーにコピーするチェックのリスト | (下記のNOTE Aを参照) |
checkmk_agent_local_group | "local"フォルダーおよびファイルの所有グループ名 | "{{ checkmk_agent_local_user }}" |
checkmk_agent_local_mode | "local"フォルダーとファイルのファイルモード設定 | "{{ checkmk_agent_mode }}" |
checkmk_agent_local_path | "local"フォルダーのフルパス | "{{ checkmk_agent_home }}/local" |
checkmk_agent_local_purge | 同期の前に"local"フォルダーを削除 | false |
checkmk_agent_local_user | "local"フォルダーとファイルの所有ユーザー名 | "{{ checkmk_agent_user }}" |
checkmk_agent_mode | CheckMKエージェント実行ファイルのファイルモード設定 | "0755" |
checkmk_agent_plugin_checks | "plugin"フォルダーにコピーするチェックのリスト | hpsa lvm mk_inventory.linux mk_iptables mk_nfsiostat mk_sshd_config netstat.linux nfsexports smart |
checkmk_agent_plugin_checks_async | "plugin"非同期フォルダーにコピーするチェックのリスト | (下記のNOTE Aを参照) |
checkmk_agent_plugin_group | "plugin"フォルダーおよびファイルの所有グループ名 | "{{ checkmk_agent_plugin_user }}" |
checkmk_agent_plugin_mode | "plugin"フォルダーおよびファイルのファイルモード設定 | "{{ checkmk_agent_mode }}" |
checkmk_agent_plugin_path | "plugin"フォルダーのフルパス | "{{ checkmk_agent_home }}/plugins" |
checkmk_agent_plugin_purge | 同期の前に"plugin"フォルダーを削除 | false |
checkmk_agent_plugin_user | "plugin"フォルダーおよびファイルの所有ユーザー名 | "{{ checkmk_agent_user }}" |
checkmk_agent_prereqs | 成功したインストールに必要なパッケージのリスト | python3-docker sudo |
checkmk_agent_prereqs_yum | YUMパッケージマネージャーを使用するシステムでの成功したインストールに必要なパッケージのリスト | sudo |
checkmk_agent_src | CheckMKエージェント実行ファイルテンプレートのファイル名 | check_mk_agent.linux.j2 |
checkmk_agent_ssh_group | ".ssh"フォルダーおよびファイルの所有グループ名 | "{{ checkmk_agent_group }}" |
checkmk_agent_ssh_mode | ".ssh"フォルダーおよびファイルのファイルモード設定 | "0700" |
checkmk_agent_ssh_path | ".ssh"フォルダーのフルパス | "{{ checkmk_agent_home }}/.ssh" |
checkmk_agent_ssh_user | ".ssh"フォルダーおよびファイルの所有ユーザー名 | "{{ checkmk_agent_user }}" |
checkmk_agent_spool_group | "spool"フォルダーおよびファイルの所有グループ名 | "{{ checkmk_agent_spool_user }}" |
checkmk_agent_spool_mode | "spool"フォルダーおよびファイルのファイルモード設定 | "{{ checkmk_agent_mode }}" |
checkmk_agent_spool_path | "spool"フォルダーのフルパス | "{{ checkmk_agent_home }}/spool" |
checkmk_agent_spool_user | "spool"フォルダーおよびファイルの所有ユーザー名 | "{{ checkmk_agent_user }}" |
checkmk_agent_sudo_dest | CheckMKエージェントユーザーにCheckMKエージェント実行ファイルへのsudoアクセスを付与するために使用される"sudoers.d"ファイルのフルパス | /etc/sudoers.d/99_cmkagent |
checkmk_agent_sudo_group | "sudoers.d"ファイルの所有グループ名 | "{{ checkmk_agent_sudo_owner }}" |
checkmk_agent_sudo_mode | "sudoers.d"ファイルのファイルモード設定 | "0440" |
checkmk_agent_sudo_owner | "sudoers.d"ファイルの所有ユーザー名 | root |
checkmk_agent_sudo_src | "sudoers.d"ファイルテンプレートのファイル名 | 99_cmkagent.j2 |
checkmk_agent_sudo_validate | "sudoers.d"ファイルを検証するために使用されるコマンド;%sはcheckmk_agent_sudo_dest で埋め込まれます |
'visudo -cf %s' |
checkmk_agent_user | CheckMKエージェントユーザーのログイン名 | cmkagent |
checkmk_agent_version | インストールするCheckMKエージェントのバージョン | 2.3.0p13 |
checkmk_agent_win_config_dest | 設定ファイルのフルパス | "{{ checkmk_agent_win_data_folder }}check_mk.user.yml" |
checkmk_agent_win_config_optimize | 一部の遅いチェックを削除してWindowsエージェントを最適化する | true |
checkmk_agent_win_config_src | 設定ファイルテンプレートのファイル名 | check_mk.user.yml.j2 |
checkmk_agent_win_data_folder | CheckMKエージェントデータフォルダーのフルパス | C:\\ProgramData\\checkmk\\agent\\ |
checkmk_agent_win_install_dest | CheckMKエージェントインストールファイルのフルパス | c:\\Users\\{{ ansible_user }}\\Downloads\\{{ checkmk_agent_win_install_src }} |
checkmk_agent_win_install_src | CheckMKエージェントインストールファイルの短いファイル名 | check_mk_agent.msi |
checkmk_agent_win_plugins | "plugin"フォルダーにコピーするWindowsプラグインのリスト | mk_inventory.vbs windows_updates.vbs |
checkmk_agent_win_productid | インストール用のバージョン固有の「製品ID」 | "{B6212139-D124-4782-8F81-05D08203092D}" |
NOTE A
checkmk_agent_local_checks_async
とcheckmk_agent_plugin_checks_async
- "plugin"非同期フォルダーにコピーするチェックのリストです。ドキュメントによれば:
ローカルチェックの出力は、エージェントプラグインの出力と同様にキャッシュできます。処理時間が長いスクリプトがある場合、キャッシュが必要になります。このようなスクリプトは非同期で実行され、定義された時間間隔でのみ実行され、最後の出力がキャッシュされます。時間が期限切れになる前にエージェントが再度クエリされると、このキャッシュがローカルチェックに使用され、エージェント出力に返されます。
これらのリストの形式は次の通りで、checkmk_agent_plugin_checks_async
が示されています:
300:
- apache_status.py
600:
- ""
900:
- ""
1800:
- ""
86400:
- mk_apt
- mk_docker.py
これにより、apache_status.py
プラグインは5分ごとに1回のみ実行され、mk_apt
およびmk_docker.py
プラグインは1日1回のみ実行されます。これにより、キャッシュされた値を使用する残りのチェックの秒数が削減されます。
依存関係
まだ定義されていません。
例のプレイブックと呼び出し
ローカルのauthorized_keys
ファイルを使用する例:
- hosts: all
roles:
- { role: kso512.checkmk_agent, checkmk_agent_authkey_src="local/authorized_keys.j2" }
plugin
フォルダーを再作成する前に削除する例:
$ ansible-playbook site.yml -t checkmk-agent -e "checkmk_agent_plugin_purge=true"
...
TASK [kso512.checkmk_agent : Delete directory - plugins | FILE] ***********
changed: [instance]
TASK [kso512.checkmk_agent : Create directory - plugins | FILE] ***********
changed: [instance]
ライセンス
貢献
提案やアイデアがあれば、ぜひイシューをオープンするか、リポジトリをフォークしてマージリクエストを送信してください。