kso512.checkmk_agent

checkmk_agent

Ansible 角色质量 Ansible 角色下载量 GitHub 仓库大小

发布 GitHub 问题

使用 Bash 制作 使用 Markdown 制作 GitHub

这是一个 Ansible 角色,用于安装 CheckMK RAW 版本 的代理/客户端。

这是对我创建和维护多年的 install-check_mk-agent 角色的完整重建,原因是 CI/CD 和 Ansible Galaxy & CheckMK 中的命名约定发生了变化。

所有任务都标记为 checkmk-agent

以下操作系统已自动测试:

出于性能考虑,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_rsaid_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_asynccheckmk_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_aptmk_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 | 文件] ***********
更改: [实例]

许可证

GNU 通用公共许可证第 2 版

贡献

如果您有任何建议或想法,请随时打开问题,或叉出仓库并提交合并请求。

作者信息

关于项目

A role to install CheckMK RAW edition agent.

安装
ansible-galaxy install kso512.checkmk_agent
许可证
gpl-2.0
下载
357
拥有者