In diesem Blog zeigen wir Ihnen, wie Sie awslogs durch Vector ersetzen, wenn Sie auf Amazon Linux 2023 aktualisieren, da awslogs nicht mehr verfügbar ist und der empfohlene Unified Cloudwatch Agent journalctl nicht unterstützt.
Warum Vector?
Wir haben uns für Vector entschieden - eine Open-Source-Pipeline für Observability, da sie sowohl journalctl als auch CloudWatch Logs unterstützt. Wir lieben die Einfachheit der Konfigurationsdateien und da wir bereits Datadog für Observability in unserer Plattform verwenden, waren wir erfreut zu wissen, dass Vector vom Community Open Source Engineering Team von Datadog gepflegt wird.
Konfigurieren Sie AL2023 für die Weiterleitung von journalctl-Protokollen an CloudWatch
Um AL2023 so zu konfigurieren, dass journalctl-Protokolle über Vector an CloudWatch weitergeleitet werden, müssen Sie Folgendes tun:
- Vektor installieren
- Konfigurieren Sie die Weiterleitung des journald-Protokolls an die CloudWatch-Protokollgruppe
- Validierung der Gesundheitsprüfung beim Start deaktivieren
- Sicherstellen, dass Vector bei Änderungen der Umgebungsdatei neu startet
- Konfigurieren Sie den Namen der AWS-Protokollgruppe
- Aktivieren Sie die Vector systemd Einheiten
- Stellen Sie sicher, dass die EC2-Instanz die richtigen Berechtigungen hat
In den folgenden Abschnitten finden Sie Einzelheiten zu den einzelnen Schritten.
Vektor installieren
Die Installation von Vector ist ganz einfach, geben Sie einfach ein:
bash -c "$(curl -L https://setup.vector.dev)"
sudo yum install -y vector
Konfigurieren Sie die journalctl zu CloudWatch Vector Pipeline
Um Vector so zu konfigurieren, dass alle journalctl-Protokolle an eine CloudWatch-Protokollgruppe weitergeleitet werden, erstellen Sie die folgende Konfiguration in /etc/vector/vector.yaml:
---
sources:
journald:
type: journald
exclude_matches:
_SYSTEMD_UNIT: [ "ntpd.service", "vector.service" ]
_TRANSPORT: [ "kernel" ]
transforms:
journald-with-env:
inputs:
- journald
type: "remap"
source: |
.log_group_name = "${AWS_LOG_GROUP_NAME:-vector}"
sinks:
cloudwatch:
type: aws_cloudwatch_logs
inputs: [ "journald-with-env" ]
create_missing_group: true
create_missing_stream: true
group_name: "{{ log_group_name }}"
stream_name: "{{ host }}"
retention:
days: 30
enabled: true
encoding:
codec: json
Mit dieser Konfiguration können Sie die CloudWatch Log-Gruppe mithilfe der Umgebungsvariablen AWS_LOG_GROUP_NAME konfigurieren. Diese Konfiguration kann in einem Basis-Image verwendet und pro Instanz über cloud-init angepasst werden. Lesen Sie mehr über die Konfiguration der Vector-Pipeline und aws_cloudwatch_logs für alle Optionen zu AWS CloudWatch Log-Gruppen.
Validierung der Gesundheitsprüfung beim Start deaktivieren
Sie sollten die Validierung der Gesundheitsprüfung beim Start deaktivieren, da Vector nicht mit ihr startet. Das liegt daran, dass Vector beim Start einen Validierungs- und Gesundheitscheck der Konfiguration durchführt. Bei diesem Validierungsschritt wird die Referenz {{ log_group_name }}
kein gültiger Protokollgruppenname ist.
Um dies zu vermeiden, überschreiben Sie die Startvalidierung der Vector systemd Konfiguration mit dem folgenden Inhalt in /etc/systemd/system/vector.service.d/override.conf:
ExecStartPre=
ExecStartPre=/usr/bin/vector validate --skip-healthchecks
[Install]
WantedBy=multi-user.target
Sicherstellen, dass Vector bei Änderungen der Umgebungsdatei neu startet
Um sicherzustellen, dass Änderungen in der Umgebungsdatei /etc/default/vector übernommen werden, fügen Sie die folgenden systemd Konfigurationsdateien hinzu: vector-restart.path und vector-restart.service.
Erstellen Sie die Datei /etc/systemd/system/vector-restart.path mit dem folgenden Inhalt:
[Unit]
Description=Monitor Vector environment variable configuration changes
Requires=vector-restart.service
[Path]
PathChanged=/etc/default/vector
[Install]
WantedBy=multi-user.target
Erstellen Sie die Datei /etc/systemd/system/vector-restart.service mit dem folgenden Inhalt:
[Unit]
Description=Restart Vector service on config change
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart vector.service
Konfigurieren Sie den Namen der AWS-Protokollgruppe
Um den Namen der gewünschten Protokollgruppe zu konfigurieren, setzen Sie die Umgebungsvariable AWS_LOG_GROUP_NAME in der Umgebungsdatei von Vector in /etc/default/vector:
AWS_LOG_GROUP_NAME=bastion
Aktivieren Sie die Vector systemd Einheiten
Um sicherzustellen, dass Vector beim Booten startet, geben Sie ein:
systemctl daemon-reload
systemctl enable vector.service vector-restart.path vector-restart.service
systemctl start vector.service vector-restart.path
Sicherstellen der EC2-Instanz-Berechtigungen
Stellen Sie sicher, dass Ihre EC2-Instanz über die folgenden Berechtigungen verfügt:
- AmazonCloudWatchLogs:CreateLogGroup
- AmazonCloudWatchLogs:CreateLogStream
- AmazonCloudWatchLogs:DescribeLogGroups
- AmazonCloudWatchLogs:DescribeLogStreams
- AmazonCloudWatchLogs:PutLogEvents
Fazit
Dieses Blog zeigt, wie einfach es ist, den Vector Log Forwarder auf Ihrer EC2-Instanz zu konfigurieren. Indem Sie den Namen der Zielprotokollgruppe in einer Umgebungsvariablen definieren, können Sie diese Konfiguration in einem Basis-Image verwenden und jede Instanz über die Variable AWS_LOG_GROUP_NAME in der Datei /etc/default/vector anpassen.
Das Bild stammt von https://github.com/vectordotdev/vector
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Contact