More

Follow

Ansible Collection Falcon LogScale – Wie nutze ich diese

By Sebastian 21. Oktober 2023 No Comments 119 Min Read

Ich habe euch schon gezeigt, wie man den Falcon LogScale Collector unter Windows installiert. Jetzt habe ich etwas neues für euch erstellt. Mit der Ansible Collection Falcon LogScale ist es sehr einfach und schnell umsetzbar, diesen zu installieren und mit der eigenen LogScale Instanz zu verbinden. In diesem Artikel zeige ich euch, wie ihr die Ansible Collection Falcon LogScale herunterladet und in eure Playbooks nutzt.

Wo finde ich die Ansible Collection Falcon LogScale?

Ich habe mich für eine Ansible Collection entschieden, da sich diese für mich und euch am einfachsten einzubinden ist und der Upgrage-Prozess nachvollziehbar ist. Gleichzeitig muss ich mich nicht um die Verteilung und Installation der Collection kümmern, das übernimmt Ansible Galaxy. Über diese zentrale Anlaufstelle für Collections, kann ich als Author diese euch kostenlos anbieten.

Die Collection ist über die folgende URL aufrufbar:

https://galaxy.ansible.com/ui/repo/published/itrunsde/logscale_collector/
Open link

Wie kann ich die Collection selber nutzen?

Als Voraussetzung, damit ihr Collections lokal nutzen könnt, benötigt ihr Ansible. Es muss mindestens die Version 2.13.9 sein. Es werden Tasks innerhalb der Collection genutzt, die erst ab dieser Version vorhanden sind. Welche Version installiert ist, kann über den folgenden Befehl überprüft werden.

ansible --version
Bash

Die Version ist n der ersten Zeile zu sehen. Sollte die Version kleiner als die vorgebene Ansible Version. Dann aktualisiert bitte die Version.

ansible [core 2.12.10]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sebastian/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/sebastian/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
  jinja version = 3.0.3
  libyaml = True
Bash

Eine Aktualisierung kann, wenn ihr Ansible über Python installiert habt, wie folgt aufgerufen werden.

sudo python3 -m pip install ansible --upgrade
Bash

Bei der Durchführung wird dann Ansible aktualisiert.

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: ansible in /usr/lib/python3/dist-packages (5.10.0)
Collecting ansible
  Downloading ansible-8.5.0-py3-none-any.whl (47.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 47.5/47.5 MB 9.1 MB/s eta 0:00:00
Collecting ansible-core~=2.15.5
  Downloading ansible_core-2.15.5-py3-none-any.whl (2.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 11.0 MB/s eta 0:00:00
Requirement already satisfied: PyYAML>=5.1 in /usr/lib/python3/dist-packages (from ansible-core~=2.15.5->ansible) (5.4.1)
Requirement already satisfied: cryptography in /usr/lib/python3/dist-packages (from ansible-core~=2.15.5->ansible) (3.4.8)
Requirement already satisfied: jinja2>=3.0.0 in /usr/lib/python3/dist-packages (from ansible-core~=2.15.5->ansible) (3.0.3)
Requirement already satisfied: resolvelib<1.1.0,>=0.5.3 in /usr/lib/python3/dist-packages (from ansible-core~=2.15.5->ansible) (0.8.1)
Requirement already satisfied: packaging in /usr/lib/python3/dist-packages (from ansible-core~=2.15.5->ansible) (21.3)
Installing collected packages: ansible-core, ansible
  WARNING: The scripts ansible, ansible-config, ansible-connection, ansible-console, ansible-doc, ansible-galaxy, ansible-inventory, ansible-playbook, ansible-pull and ansible-vault are installed in '/home/sebastian/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script ansible-community is installed in '/home/sebastian/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed ansible-8.5.0 ansible-core-2.15.5
Bash

Der Abschluss der Aktualisierung kann durch erneutes Aufrufen zur Prüfung der Ansible Version durchgeführt werden.

ansible --version
Bash

Sollte alles erfolgreich abgeschlossen sein, so haben wir jetzt die aktuelle Version 2.15.5 installiert.

ansible [core 2.15.5]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sebastian/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/sebastian/.local/lib/python3.10/site-packages/ansible
  ansible collection location = /home/sebastian/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True
Bash

Ist die Voraussetzung geschaffen, so gehte es weiter auf der Konsole und wir installieren die Collection. Dazu verwenden wir die von Ansible bereitgestellten Tools, die bei der Installation/Upgrade von Ansible auch mit installiert werden.

Mit diesem einfachen Befehl wird die Collection heruntergeladen und in den Katalog gespeichert, so dass sie in einem Playbook genutzt werden kann. Diese stellt nur die Collection bereit, installiert aber nichts auf dem aktuellen System.

ansible-galaxy collection install itrunsde.logscale_collector
Bash

Es ist eine neue Version vorhanden – wie upgraden?

Natürlich gibt es auch hier Neuerungen oder Bugfixes die mit einfließen. So ändert sich auch die Version der Ansible Collection Falcon LogScale. Um die Änderungen auch auf dem lokalen System zu erhalten, muss ein Upgrade der lokalen Collection durchgeführt werden.

Ein Upgrade ist wie eine Installation mit dem Zusatz des Upgrades. Es muss also nur der folgende Befehl ausgeführt werden.

ansible-galaxy collection install itrunsde.logscale_collector --upgrade
Bash

Um zu überprüfen, welche Version ihr installiert könnt ihr den folgenden Befehl ausführen. Dieser listet alle lokal installierten Collections innerhalb der Ansible Standardpfade auf und gibt die entsprechende Version mit aus.

ansible-galaxy collection list
Bash

Eine Ausgabe kann wie folgt aussehen. Wie zu sehen ist die Version 1.1.0 bei meinem Beispiel installiert.

# /Users/sebastian/.ansible/collections/ansible_collections
Collection                    Version
----------------------------- -------
ansible.eda                   1.4.3
itrunsde.logscale_collector   1.1.0

# /opt/homebrew/Cellar/ansible/8.5.0_1/.../ansible_collections
Collection                    Version
----------------------------- -------
amazon.aws                    6.5.0
ansible.netcommon             5.2.0
ansible.posix                 1.5.4
ansible.utils                 2.11.0
ansible.windows               1.14.0
Bash

Damit gerüstet können wir uns um die Nutzung innerhalb des Playbooks stürzen.

Playbook – Server führe folgendes durch

Ein Playbook ist ganz einfach gesagt, eine Abfolge von Tasks die auf einem System durchzuführen sind. Dabei wird vorher überprüft, ob der Task durchgeführt werden muss oder ob die Änderung schon im System durchgeführt wurde. Ansible verfolgt hier den Ansatz, wie wir ihn schon beim DSC-Skript gesehen haben, Idempotent.

Ein einfaches Playbook, welches den Falcon LogScale Collector installiert und mit einem EnrollmentToken verbindet, kann wie folgt aussehen:

---
- hosts: all
  roles:
    - name: itrunsde.logscale_collector.install
      vars:
        - installer: "humio-log-collector_1.5.2_linux_amd64.deb"
    -name: itrunsde.logscale_collector.enroll
      vars:
        - enrollment_token: "xxxxxxxxxx"
install-logscale_collector.yml

Der Aufbau des Playbooks ist sehr kurz gehalten. Es können natürlich noch weitere Tasks mit einfließen, die weitere Aufgaben erledigen. Ich erläutere einmal den Aufbau, da nicht jeder täglich mit Ansible Playbooks arbeitet.

Zeile 6: Installationsdatei welche unter files/humio-log-collector_1.5.2_linux_amd64.deb liegt
Zeile 9: Token für das Enrollment

Ihr müsst nur einen Ordner files anlegen und in diesem, die in der Zeile 6 angegebe Datei, abspeichern. Anschließend übertragt ihr noch den Enrollment Token aus dem Data Ingets (Fleet Management).

Um das oben gezeigte Playbook install-logscale_collector.yml auszuführen, könnt ihr den folgenden Befehl nutzen.

ansible-playbook install-logscale_collector.yml
Bash

So sieht die Ausgabe für eine erfolgreiche Installation aus.

PLAY [Install end enroll LogScale] ********************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************
ok: [lx02]

TASK [itrunsde.logscale_collector.install : Copy install package to server] ***************************************************************************************************************
ok: [lx02]

TASK [itrunsde.logscale_collector.install : Install package] ******************************************************************************************************************************
changed: [lx02]

TASK [itrunsde.logscale_collector.install : Add user to the 'adm' group for reading the /var/log/ directory] ******************************************************************************
changed: [lx02]

TASK [itrunsde.logscale_collector.enroll : Check the enrollment_token] ********************************************************************************************************************
ok: [lx02]

TASK [itrunsde.logscale_collector.enroll : Display custom error message if decoding failed] ***********************************************************************************************
skipping: [lx02]

TASK [itrunsde.logscale_collector.enroll : Check if installToken is present inside the decoded string] ************************************************************************************
skipping: [lx02]

TASK [itrunsde.logscale_collector.enroll : Check if url is present inside the decoded string] *********************************************************************************************
skipping: [lx02]

TASK [itrunsde.logscale_collector.enroll : Check if agent is enrolled] ********************************************************************************************************************
fatal: [lx02]: FAILED! => {"changed": false, "cmd": "grep -E '^\\s*fleetManagement:' /etc/humio-log-collector/config.yaml &&\ngrep -E '^\\s*url: https://cloud.(community.)?humio.com' /etc/humio-log-collector/config.yaml &&\ngrep -E '^\\s*mode: full' /etc/humio-log-collector/config.yaml\n", "delta": "0:00:00.003881", "end": "2023-10-21 07:52:09.157459", "msg": "non-zero return code", "rc": 1, "start": "2023-10-21 07:52:09.153578", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring

TASK [itrunsde.logscale_collector.enroll : Enroll agent, if needed] ***********************************************************************************************************************
changed: [lx02]

RUNNING HANDLER [itrunsde.logscale_collector.install : Restart humio-log-collector service] ***********************************************************************************************
changed: [lx02]

PLAY RECAP ********************************************************************************************************************************************************************************
lx02                       : ok=8    changed=4    unreachable=0    failed=0    skipped=3    rescued=0    ignored=1
Bash

Solltet ihr auf Fehler stoßen, so nutzt bitte diesen Link hier – Issue Tracker.

Dokumentation Ansible Collection Falcon LogScale

Alle weitere Dokumentation und auch die Changelogs zu der Ansible Collection Falcon LogScale findet ihr über GitHub. Es wird eine ständige Weiterentwicklung statt finden. Aktuell sind nur die Debian Betriebssysteme abgedeckt. Dieses wird noch erweitert auf RedHat, etc.

L
L
Leave a Reply

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert