kso512.checkmk_agent
checkmk_agent
To jest Rola Ansible do instalacji agenta/klienta dla CheckMK RAW edition.
Jest to całkowicie przerobiona wersja roli install-check_mk-agent, którą tworzyłem i utrzymywałem przez lata. Zmiany zostały wprowadzone w związku z nowymi zasadami CI/CD oraz konwencjami nazewnictwa w Ansible Galaxy i CheckMK.
Wszystkie zadania są oznaczone jako checkmk-agent
.
Poniższe dystrybucje zostały przetestowane automatycznie:
- 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"
Z powodów wydajnościowych następujące "sekcje" zostały domyślnie wyłączone w agencie Windows:
- services
- msexch
- dotnet_clrmemory
- wmi_webservices
- wmi_cpuload
- ps
- fileinfo
- logwatch
- openhardwaremonitor
Dodatkowo, wykonanie wtyczek zostało dostosowane:
- Limit czasu zwiększony z
30
do120
- Włączono asynchroniczność
- Cache_age ustawione na
3600
(1 godzina)
Utwórz własny plik "check_mk.user.yml.j2" i przekaż checkmk_agent_win_config_src
, aby dostosować dalsze ustawienia, lub ustaw zmienną checkmk_agent_win_config_optimize
na false
, aby wyłączyć tę optymalizację.
Podobne modyfikacje zostały dokonane na domyślnym pliku docker.cfg
. Tutaj wszystkie sekcje docker zostały włączone, a przywrócenie domyślnych ustawień można osiągnąć ustawiając zmienną checkmk_agent_docker_complete
na false
.
Ostatnia Matryca Wersji
Wersja CheckMK Raw Edition | Wersja/Tag Roli |
---|---|
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 |
Wymagania
Ta rola nie wymaga innych ról. Jest zaprojektowana, aby współpracować z serwerami CheckMK w ogóle oraz z kso512.checkmk_server w szczególności.
Jeśli łączysz się z hostem Windows za pomocą Windows Remote Management (WinRM), może być konieczne zainstalowanie pakietu pywinrm
na swoim systemie Ansible:
pip install "pywinrm>=0.3.0"
Ta rola wykorzystuje SSH na systemach typu Unix zamiast domyślnego portu 6556. Szyfruje to komunikację i unika otwierania nowego portu do monitorowania oraz uruchamiania nowej usługi.
Aby utworzyć klucze uwierzytelniające dla SSH, użyj programu "ssh-keygen", jak pokazano tutaj.
Przykład tworzenia domyślnych kluczy bez hasła w lokalnym folderze:
ssh-keygen -C "cmkagent@$HOSTNAME" -f ./id_rsa -N "" -v
Utworzy to dwa pliki: id_rsa
i id_rsa.pub
.
id_rsa
= Klucz prywatny, który należy przechowywać w bezpiecznym miejscu. Ten plik powinien znajdować się w folderze ~/.ssh
użytkownika agenta CheckMK. Przykład użycia domyślnego użytkownika i witryny z "kso512.checkmk_server":
cp ./id_rsa /opt/omd/sites/test/.ssh
id_rsa.pub
= Klucz publiczny, który można udostępniać innym zaufanym hostom. Ten plik powinien być dodany do lokalnego pliku "authorized_keys.j2". Zakładając domyślną strukturę ról:
echo '# {{ ansible_managed }}' > /etc/ansible/local/authorized_keys.j2
cat ./id_rsa.pub >> /etc/ansible/local/authorized_keys.j2
Następnie zadeklaruj local/authorized_keys.j2
jako checkmk_agent_authkey_src
w swoich własnych zmiennych; przykład pokazany poniżej.
Na koniec skonfiguruj sam CheckMK, aby wykorzystał te pliki zamiast próbować połączyć się z portem TCP 6556:
- Zaloguj się do CheckMK
- Ustawienia > Szukaj > "indywidualne" > Indywidualne wywołanie programu zamiast dostępu agenta
- Utwórz regułę w folderze: Katalog główny
- Opis:
Użyj SSH i konta cmkagent z kluczami SSH
- Linia poleceń do wykonania:
ssh -i ~/.ssh/id_rsa -l cmkagent <IP> sudo /home/cmkagent/check_mk_agent
- Explicit hosts: (wybierz hosta testowego, następnie, gdy będzie działać, skonfiguruj tagi hosta lub etykiety)
- Zapisz
- Opis:
- 1 zmiana > Aktywuj na wybranych witrynach
Zmienne Roli
Niektóre z nich mogą wydawać się zbędne, ale są podane, aby przyszli użytkownicy mogli je w razie potrzeby zmieniać za pomocą lokalnych zmiennych.
Tabela Zmiennych (z Domyślnymi Wartościami)
Zmienna | Opis | Domyślna |
---|---|---|
checkmk_agent_authkey_dest | Pełna ścieżka do pliku "authorized_keys" | "{{ checkmk_agent_ssh_path }}/authorized_keys" |
checkmk_agent_authkey_group | Nazwa grupy, która powinna posiadać plik "authorized_keys" | "{{ checkmk_agent_ssh_group }}" |
checkmk_agent_authkey_mode | Ustawienia trybu pliku dla pliku "authorized_keys" | "0600" |
checkmk_agent_authkey_src | Nazwa pliku szablonu "authorized_keys" | authorized_keys.j2 |
checkmk_agent_authkey_user | Nazwa użytkownika, który powinien posiadać plik "authorized_keys" | "{{ checkmk_agent_ssh_user }}" |
checkmk_agent_cache_group | Nazwa grupy, która powinna posiadać folder i pliki "cache" | "{{ checkmk_agent_cache_user }}" |
checkmk_agent_cache_mode | Ustawienia trybu pliku dla folderu i plików "cache" | "{{ checkmk_agent_mode }}" |
checkmk_agent_cache_path | Pełna ścieżka do folderu "cache" | "{{ checkmk_agent_home }}/cache" |
checkmk_agent_cache_user | Nazwa użytkownika, który powinien posiadać folder i pliki "cache" | "{{ checkmk_agent_user }}" |
checkmk_agent_comment | Pełna nazwa użytkownika agenta CheckMK | CheckMK Agent |
checkmk_agent_count_users_crit | Krytyczny próg zalogowanych użytkowników | 15 |
checkmk_agent_count_users_warn | Ostrzegawczy próg zalogowanych użytkowników | 10 |
checkmk_agent_count_zombie_procs_crit | Krytyczny próg procesów zombie | 10 |
checkmk_agent_count_zombie_procs_warn | Ostrzegawczy próg procesów zombie | 5 |
checkmk_agent_dest | Pełna ścieżka do pliku wykonywalnego agenta CheckMK | "{{ checkmk_agent_home }}/check_mk_agent" |
checkmk_agent_docker_complete | Uwzględnij wszystkie moduły dockera | true |
checkmk_agent_docker_dest | Pełna ścieżka do pliku konfiguracyjnego Dockera | "{{ checkmk_agent_home }}/docker.cfg" |
checkmk_agent_docker_group | Nazwa grupy, która powinna posiadać plik konfiguracyjny Dockera | "{{ checkmk_agent_group }}" |
checkmk_agent_docker_mode | Ustawienia trybu pliku dla pliku konfiguracyjnego Dockera | "0644" |
checkmk_agent_docker_src | Nazwa pliku szablonu pliku konfiguracyjnego Dockera | docker.cfg.j2 |
checkmk_agent_docker_user | Nazwa użytkownika, który powinien posiadać plik konfiguracyjny Dockera | "{{ checkmk_agent_user }}" |
checkmk_agent_group | Nazwa grupy, która powinna posiadać plik wykonywalny agenta CheckMK | "{{ checkmk_agent_user }}" |
checkmk_agent_home | Pełna ścieżka do folderu domowego użytkownika agenta CheckMK | /home/{{ checkmk_agent_user }} |
checkmk_agent_local_checks | Lista kontroli do skopiowania do folderu "local" | count_users count_zombie_procs |
checkmk_agent_local_checks_async | Lista kontroli do skopiowania do folderów asynchronicznych "local" | (Zobacz UWAGĘ A poniżej) |
checkmk_agent_local_group | Nazwa grupy, która powinna posiadać folder i pliki "local" | "{{ checkmk_agent_local_user }}" |
checkmk_agent_local_mode | Ustawienia trybu pliku dla folderu i plików "local" | "{{ checkmk_agent_mode }}" |
checkmk_agent_local_path | Pełna ścieżka do folderu "local" | "{{ checkmk_agent_home }}/local" |
checkmk_agent_local_purge | Usuń folder "local" przed synchronizacją | false |
checkmk_agent_local_user | Nazwa użytkownika, który powinien posiadać folder i pliki "local" | "{{ checkmk_agent_user }}" |
checkmk_agent_mode | Ustawienia trybu pliku dla pliku wykonywalnego agenta CheckMK | "0755" |
checkmk_agent_plugin_checks | Lista kontroli do skopiowania do folderu "plugin" | hpsa lvm mk_inventory.linux mk_iptables mk_nfsiostat mk_sshd_config netstat.linux nfsexports smart |
checkmk_agent_plugin_checks_async | Lista kontroli do skopiowania do folderów asynchronicznych "plugin" | (Zobacz UWAGĘ A poniżej) |
checkmk_agent_plugin_group | Nazwa grupy, która powinna posiadać folder i pliki "plugin" | "{{ checkmk_agent_plugin_user }}" |
checkmk_agent_plugin_mode | Ustawienia trybu pliku dla folderu i plików "plugin" | "{{ checkmk_agent_mode }}" |
checkmk_agent_plugin_path | Pełna ścieżka do folderu "plugin" | "{{ checkmk_agent_home }}/plugins" |
checkmk_agent_plugin_purge | Usuń folder "plugin" przed synchronizacją | false |
checkmk_agent_plugin_user | Nazwa użytkownika, który powinien posiadać folder i pliki "plugin" | "{{ checkmk_agent_user }}" |
checkmk_agent_prereqs | Lista pakietów potrzebnych do udanej instalacji | python3-docker sudo |
checkmk_agent_prereqs_yum | Lista pakietów potrzebnych do udanej instalacji na systemach korzystających z YUM jako menedżera pakietów | sudo |
checkmk_agent_src | Nazwa pliku szablonu pliku wykonywalnego agenta CheckMK | check_mk_agent.linux.j2 |
checkmk_agent_ssh_group | Nazwa grupy, która powinna posiadać folder ".ssh" i pliki | "{{ checkmk_agent_group }}" |
checkmk_agent_ssh_mode | Ustawienia trybu pliku dla folderu ".ssh" i plików | "0700" |
checkmk_agent_ssh_path | Pełna ścieżka do folderu ".ssh" | "{{ checkmk_agent_home }}/.ssh" |
checkmk_agent_ssh_user | Nazwa użytkownika, który powinien posiadać folder ".ssh" i pliki | "{{ checkmk_agent_user }}" |
checkmk_agent_spool_group | Nazwa grupy, która powinna posiadać folder i pliki "spool" | "{{ checkmk_agent_spool_user }}" |
checkmk_agent_spool_mode | Ustawienia trybu pliku dla folderu i plików "spool" | "{{ checkmk_agent_mode }}" |
checkmk_agent_spool_path | Pełna ścieżka do folderu "spool" | "{{ checkmk_agent_home }}/spool" |
checkmk_agent_spool_user | Nazwa użytkownika, który powinien posiadać folder i pliki "spool" | "{{ checkmk_agent_user }}" |
checkmk_agent_sudo_dest | Pełna ścieżka do pliku "sudoers.d", używanego do nadania użytkownikowi agenta CheckMK dostępu sudo do pliku wykonywalnego agenta CheckMK | /etc/sudoers.d/99_cmkagent |
checkmk_agent_sudo_group | Nazwa grupy, która powinna posiadać plik "sudoers.d" | "{{ checkmk_agent_sudo_owner }}" |
checkmk_agent_sudo_mode | Ustawienia trybu pliku dla pliku "sudoers.d" | "0440" |
checkmk_agent_sudo_owner | Nazwa użytkownika, który powinien posiadać plik "sudoers.d" | root |
checkmk_agent_sudo_src | Nazwa pliku szablonu "sudoers.d" | 99_cmkagent.j2 |
checkmk_agent_sudo_validate | Polecenie służące do walidacji pliku "sudoers.d"; %s zostanie wypełnione wartością checkmk_agent_sudo_dest |
'visudo -cf %s' |
checkmk_agent_user | Nazwa użytkownika agenta CheckMK | cmkagent |
checkmk_agent_version | Wersja agenta CheckMK do zainstalowania | 2.3.0p13 |
checkmk_agent_win_config_dest | Pełna ścieżka do pliku konfiguracyjnego | "{{ checkmk_agent_win_data_folder }}check_mk.user.yml" |
checkmk_agent_win_config_optimize | Optymalizuj agenta Windows, rezygnując z niektórych wolniejszych kontroli | true |
checkmk_agent_win_config_src | Nazwa pliku szablonu pliku konfiguracyjnego | check_mk.user.yml.j2 |
checkmk_agent_win_data_folder | Pełna ścieżka do folderu danych agenta CheckMK | C:\\ProgramData\\checkmk\\agent\\ |
checkmk_agent_win_install_dest | Pełna ścieżka do pliku instalacyjnego agenta CheckMK | c:\\Users\\{{ ansible_user }}\\Downloads\\{{ checkmk_agent_win_install_src }} |
checkmk_agent_win_install_src | Krótka nazwa pliku instalacyjnego agenta CheckMK | check_mk_agent.msi |
checkmk_agent_win_plugins | Lista wtyczek Windows do skopiowania do folderu "plugin" | mk_inventory.vbs windows_updates.vbs |
checkmk_agent_win_productid | Specyficzny dla wersji "Product ID" do zainstalowania | "{B6212139-D124-4782-8F81-05D08203092D}" |
UWAGA A
checkmk_agent_local_checks_async
oraz checkmk_agent_plugin_checks_async
- Lista kontroli do skopiowania do asynchronicznych folderów "plugin". Per dokumentacja:
Wynik lokalnych kontroli, jak to ma miejsce w przypadku wtyczek agenta, może być buforowany. Może to być konieczne, jeśli skrypt ma dłuższy czas przetwarzania. Taki skrypt jest następnie wykonywany asynchronicznie i tylko w określonym interwale czasowym, a ostatni wynik jest buforowany. Jeśli agent zostanie zapytany ponownie przed upływem czasu, używa tego cache'u dla lokalnej kontroli i zwraca go w wyniku agenta.
Format tych list jest następujący, z checkmk_agent_plugin_checks_async
pokazanym:
300:
- apache_status.py
600:
- ""
900:
- ""
1800:
- ""
86400:
- mk_apt
- mk_docker.py
To uruchomi wtyczkę apache_status.py
tylko raz na pięć minut, a wtyczki mk_apt
i mk_docker.py
tylko raz dziennie, zamiast przy każdej kontroli. To oszczędza sekundy na każdej pozostałej kontroli w ciągu dnia, która korzysta z buforowanej wartości.
Zależności
Jak dotąd brak.
Przykładowy Playbook i Wywołanie
Przykład, który używa lokalnego pliku authorized_keys
:
- hosts: all
roles:
- { role: kso512.checkmk_agent, checkmk_agent_authkey_src="local/authorized_keys.j2" }
Przykład, który czyści folder plugin
przed ponownym utworzeniem:
$ ansible-playbook site.yml -t checkmk-agent -e "checkmk_agent_plugin_purge=true"
...
ZADANIE [kso512.checkmk_agent : Usunięcie katalogu - plugins | PLIKI] ***********
zmieniono: [instance]
ZADANIE [kso512.checkmk_agent : Utworzenie katalogu - plugins | PLIKI] ***********
zmieniono: [instance]
Licencja
GNU General Public License wersja 2
Współpraca
Jeśli masz jakieś sugestie lub pomysły, zapraszam do otwierania ticketów lub forkingu repozytorium i przesyłania prośby o scalenie.
Informacje o autorze
A role to install CheckMK RAW edition agent.
ansible-galaxy install kso512.checkmk_agent