kso512.checkmk_agent
checkmk_agent
这是一个 Ansible 角色,用于安装 CheckMK RAW 版本 的代理/客户端。
这是对我创建和维护多年的 install-check_mk-agent 角色的完整重建,原因是 CI/CD 和 Ansible Galaxy & CheckMK 中的命名约定发生了变化。
所有任务都标记为 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 系统上使用 SSH,而不是默认的端口 6556。这会加密通信,并避免为监控和设置新服务而打开新端口。
要创建 SSH 的身份验证密钥,请使用 "ssh-keygen" 程序,如 这里 所示。
以下是在本地文件夹中创建默认密钥的示例,没有密码短语:
ssh-keygen -C "cmkagent@$HOSTNAME" -f ./id_rsa -N "" -v
这将创建两个文件:id_rsa
和 id_rsa.pub
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 Agent 用户的全名 | 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 Agent 可执行文件的完整路径 | "{{ 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 Agent 可执行文件的组名 | "{{ checkmk_agent_user }}" |
checkmk_agent_home | CheckMK Agent 用户主文件夹的完整路径 | /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 Agent 可执行文件的权限设置 | "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 Agent 可执行文件模板的文件名 | 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 | "sudoers.d" 文件的完整路径,用于授予 CheckMK Agent 用户对 CheckMK Agent 可执行文件的 sudo 访问权限 | /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 Agent 用户的登录名 | cmkagent |
checkmk_agent_version | 要安装的 CheckMK Agent 版本 | 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 Agent 数据文件夹的完整路径 | C:\\ProgramData\\checkmk\\agent\\ |
checkmk_agent_win_install_dest | CheckMK Agent 安装文件的完整路径 | c:\\Users\\{{ ansible_user }}\\Downloads\\{{ checkmk_agent_win_install_src }} |
checkmk_agent_win_install_src | CheckMK Agent 安装文件的短文件名 | 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
插件每五分钟仅运行一次,而 mk_apt
和 mk_docker.py
插件每天仅运行一次,而不是每次检查。这会节省每天其余检查的几秒钟时间,使用缓存值。
依赖关系
尚未定义。
示例剧本和调用
使用本地 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"
...
任务 [kso512.checkmk_agent : 删除目录 - plugins | 文件] ***********
更改: [实例]
任务 [kso512.checkmk_agent : 创建目录 - plugins | 文件] ***********
更改: [实例]
许可证
贡献
如果您有任何建议或想法,请随时打开问题,或叉出仓库并提交合并请求。