AWS : Cloudwatch Agent & collectd

Cloudwatch liefert ja schon von Haus aus viele Metriken will man jedoch "tiefer" ins System schauen empfiehlt es sich einen anderen Agent zu verwenden (zusätzlich oder den Cloudwatch Agent nur als Bridge)

Ich habe mich für den Weg entschlossen die Metriken von collectd üder den cloudwatch agent in Cloudwatch zu reporten. Dort können dann wie gewohnt Alarme definiert werden.

Als erstes braucht man einen IAM User (Programmatic access) und eine IAM Role die das Recht besitzen in Cloudwatch zu reporten.
IAM UserIAM Role

Die Role "ServerMonitoring" weißt man dann den EC2 Instanzen zu die in das Monitoring aufgenommen werden müssen.

attach iam role
attach iam role to instance

Jetzt müssen die benötigten Packete heruntergeladen & installiert werden. Mein Beispiel ist für Debian 8 und Debian 9 geeignet. Bei anderen Linux Systemen ist der Ablauf etwas anders. Der Cloudwatch Agent kann auf der Seite ( Install Cloudwatch Agent ) für andere Systeme heruntergeladen werden. Das Github Repo für die collectd-cloudwatch Bridge ist hier GitHub - awslabs
mkdir -p ~/downloads
cd ~/downloads
wget https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb
wget https://github.com/awslabs/collectd-cloudwatch/archive/master.zip
dpkg -i amazon-cloudwatch-agent.deb
unzip master.zip
Unter Debian muss man das setup.py script leicht abändern ;-)
cd collectd-cloudwatch-master/src/
vi setup.py
dort suchen nach
DISTRIBUTION_TO_INSTALLER = {
    "Ubuntu": APT_INSTALL_COMMAND,
    "Red Hat Enterprise Linux Server": YUM_INSTALL_COMMAND,
    "Amazon Linux AMI": YUM_INSTALL_COMMAND,
    "Amazon Linux": YUM_INSTALL_COMMAND,
    "CentOS Linux": YUM_INSTALL_COMMAND,
}
ersetze mit
DISTRIBUTION_TO_INSTALLER = {
    "Debian GNU": APT_INSTALL_COMMAND,
    "Ubuntu": APT_INSTALL_COMMAND,
    "Red Hat Enterprise Linux Server": YUM_INSTALL_COMMAND,
    "Amazon Linux AMI": YUM_INSTALL_COMMAND,
    "Amazon Linux": YUM_INSTALL_COMMAND,
    "CentOS Linux": YUM_INSTALL_COMMAND,
}
Dann muss collectd installiert werden und die aws cli konfiguriert werden
apt install collectd
aws configure (AWS Key & Security Key von monitoring user angeben)
jetzt installieren wir noch die bridge
chmod u+x ~/downloads/collectd-cloudwatch-master/src/setup.py 
~/downloads/collectd-cloudwatch-master/src/setup.py 
jetzt wird das alles noch konfiguriert
/opt/aws/amazon-cloudwatch-agent/amazon-cloudwatch-agent-config-wizard
vi /etc/collectd/collectd.conf
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
dann alles neu starten
systemctl restart amazon-cloudwatch-agent
systemctl restart collectd
es gibt im plugin cloudwatch-collectd zwei Dateien die jetzt steuern was bei cloudwatch ankommt und was nicht. In der Datei /opt/collectd-plugins/cloudwatch/config/blocked_metrics sind alle aktuell erkannten Metriken gelistet. Möchte man jetzt z.B. das der Speicher (memory) an cloudwatch reportet wird so muss dieser in der Datei whitelist.conf eingetragen werden. z.B. für Speicher (memory--.*) ob eure Werte ankommen oder nicht seht ihr nach einer Tasse Kaffee oder Tee hier in cloudwatch AWS Collectd Metriken
die cloudwatch metriken liefern normalerweise
df-root-percent_bytes-used
memory--percent-used
swap--percent-used
cpu--percent-active
Das Ergebnis seht ihr hier :AWS_MEMORY Cloudwatch collectd
für das debugen sollte dieses Log verwendert werden.
less /var/log/collectd.log

Quellen :
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-first-instance.html
https://github.com/awslabs/collectd-cloudwatch
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-collectd.html
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html

Nextcloud 14 : Thunderbird Lightning

Mein Thunderbird Lightning konnte nach dem Update meiner Server und der Nextcloud nicht mehr auf die Kontakte und dem Kalender in der Nextcloud zugreifen. Nachdem ich etwas recherchiert habe konnte ich den Fehler lösen indem ich network.cookie.same-site.enabled auf false gesetzt habe.
Dazu geht ihr in Thunderbird auf Edit -> Preferences -> Advanced -> Config Editor dort sucht ihr network.cookie.same-site.enabled und setzt den Wert auf false. Nach einem Neustart von Thunderbird sollte alles wieder funktionieren. So wie es aussieht wird das auch erst in Nextcloud 15 gefixt. (NC15 - Fix)
https://github.com/nextcloud/server/issues/10134
https://bugzilla.mozilla.org/show_bug.cgi?id=1468912

Nextcloud 14 : mod_security2 Id's

Meine Nextcloud 14 hat nach dem Update nicht richtig funktioniert. Filetree hat sich nich aufgebaut caldav hat nicht mehr funktioniert. Nachdem ich in der VHost folgenden Eintrag hinzugefügt habe hat wieder alles funktioniert.
<IfModule mod_security2.c>
    # Nextcloud
    SecRuleRemoveById 949110 911100 920420
</IfModule>

Grafana : Nach Update keinen Zugriff auf Datenquelle

So nun ist es auch mir mal passiert, nach einem Update von Debian 8.11 auf 9.5 hat das installierte Grafana keinen Zugriff mehr auf die influxdb mehr erhalten. Bei mir war mod_security2 der Grund. Nachdem ich eine neue Regel in die VHost eingetragen habe hat wieder alles funktioniert. Mein Grafana läuft hinter einem SSL Proxy.

Ich hab diese Fehlermeldung erhalten:
Title : 403 Forbidden
Message : You don't have permission to access /grafana/api/datasources/1 on this server.
Konfig in den VHost eintragen.

mod_security2
das sind noch nicht alle id's bin noch am sammeln ;-)
man kann die SecRules auch auf eine Location deaktivieren das ist der schnellere aber auch unsichere Weg

mod_security2_1
modsecurity
Alternativ dazu könnte man das Modul auch deaktivieren, aber Sicherheit geht vor ;-) Für einen Test kann man das mit dem folgenden Befehl erreichen.
a2dismod security2 ; systemctl restart apache2

Ansible : auflisten der remote folder

Hier werden alle remote Ordner aufgelistet unter dem vorgegeben Remote Pfad {{ dst_path }}
    - name: get directories
      shell: ls -1 "{{ dst_path }}"
      register: folders_test
anzeigen der ermittelten Ordner
    - name: show directories
      debug:
        msg: "Folder {{ item }}"
      with_items: "{{ folders_test.stdout_lines }}"
“Sicher ist, dass nichts sicher ist. Selbst das nicht.”
Joachim Ringelnatz