checkmk_agent
checkmk_agent
Это Ansible роль для установки агента/клиента для CheckMK RAW edition.
Это полная переработка роли 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 Edition | Версия/Тег роли |
---|---|
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 хосту с помощью Windows Remote Management (WinRM), вам может понадобиться установить пакет pywinrm
на вашей системе Ansible:
pip install "pywinrm>=0.3.0"
Эта роль использует SSH на Unix-подобных системах вместо стандартного порта 6556. Это шифрует коммуникации и избегает открытия нового порта для мониторинга и настройки новой службы.
Чтобы создать ключи аутентификации для SSH, используйте программу "ssh-keygen", как показано здесь.
Пример создания стандартных ключей без пароля в локальной папке:
ssh-keygen -C "cmkagent@$HOSTNAME" -f ./id_rsa -N "" -v
Это создаст два файла: id_rsa
& id_rsa.pub
id_rsa
= Закрытый ключ, который должен храниться в безопасности. Этот файл необходимо разместить в папке ~/.ssh
пользователя CheckMK Agent. Пример с использованием стандартного пользователя и сайта "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" | (См. ПРИМЕЧАНИЕ 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" | (См. ПРИМЕЧАНИЕ 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 прав sudo на исполняемый файл CheckMK Agent | /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 | Список плагинов Windows для копирования в папку "plugin" | mk_inventory.vbs windows_updates.vbs |
checkmk_agent_win_productid | Специфичный для версии "Product ID" для установки | "{B6212139-D124-4782-8F81-05D08203092D}" |
ПРИМЕЧАНИЕ 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 | ФАЙЛ] ***********
изменен: [instance]
ЗАДАЧА [kso512.checkmk_agent : Создать каталог - plugins | ФАЙЛ] ***********
изменен: [instance]
Лицензия
GNU General Public License version 2
Участие
Если у вас есть предложения или идеи, пожалуйста, не стесняйтесь открывать проблему или форкать репозиторий и отправить запрос на слияние.
Информация об авторе
A role to install CheckMK RAW edition agent.
ansible-galaxy install kso512/checkmk_agent