8 votes

Journaux de l'hôte Google Cloud Container Optimized OS vers stackdriver

TL;DR
Quelle est la meilleure pratique pour envoyer des os optimisés pour les conteneurs ? hôte les journaux (ssh et commandes shell exécutées) vers Stackdriver ?

Le contexte :
J'utilise le système d'exploitation optimisé pour les conteneurs de Google, qui fonctionne très bien. Il est très facile d'envoyer les journaux des conteneurs à Stackdriver, mais comment puis-je envoyer hôte les logs de Stackdriver ?

C'est à des fins d'audit, j'ai besoin d'enregistrer toutes les connexions SSH (acceptées ou refusées) et toutes les commandes exécutées via le shell. Auparavant, j'envoyais simplement le rsyslogd (auth,authpriv) à stackdriver via le paquet stackdriver host logger.

Ceci s'applique aux machines virtuelles à système d'exploitation optimisé pour les conteneurs fonctionnant dans un groupe d'instances gérées (mig), et non dans Google Kubernetes Engine.

C'est peut-être très évident, mais je n'arrive pas à trouver de documentation à ce sujet.

1voto

Mohamed Esmat Points 36

En gros, c'est ce que vous devez faire pour toute instance COS GCP pour envoyer les journaux d'audit de l'OS à Google stackdriver :

Tout d'abord, vous devez activer les journaux d'audit sur le COS en utilisant la commande suivante : systemctl start cloud-audit-setup Pour que les journaux d'audit soient générés et capturés dans le journal de l'instance de calcul, vous pouvez utiliser la commande suivante journalctl pour voir le résultat

Deuxièmement, l'agent Google Stackdriver doit être installé sur l'instance et configuré pour envoyer les journaux d'audit du journal de l'instance au pilote de pile. Cela peut être réalisé en ayant un conteneur docker exécutant l'image de conteneur google fluentd-gcp.

Je partage avec vous le cloud-init ci-dessous qui fera tout le travail pour vous. Tout ce que vous devez faire est d'avoir une métadonnée d'instance avec la clé "user-data" et la valeur est le script ci-dessous :

#cloud-config
users:
- name: logger
  uid: 2001
  groups: docker

write_files:

- path: /etc/google-fluentd/fluentd.conf
  permissions: 0644
  owner: root
  content: |
    # This config comes from a heavily trimmed version of the
    # container-engine-customize-fluentd project. The upstream config is here:
    # https://github.com/GoogleCloudPlatform/container-engine-customize-fluentd/blob/6a46d72b29f3d8e8e495713bc3382ce28caf744e/kubernetes/fluentd- 
configmap.yaml
    <source>
        type systemd
        path /var/log/journal
        pos_file /var/log/gcp-journald.pos
        filters [{ "SYSLOG_IDENTIFIER": "audit" }]  
        tag node-journal
        read_from_head true
    </source>
    <match **>
      @type copy
       <store>
        @type google_cloud
        # Set the buffer type to file to improve the reliability
        # and reduce the memory consumption
        buffer_type file
        buffer_path /var/log/google-fluentd/cos-system.buffer
        # Set queue_full action to block because we want to pause gracefully
        # in case of the off-the-limits load instead of throwing an exception
        buffer_queue_full_action block
        # Set the chunk limit conservatively to avoid exceeding the GCL limit
        # of 10MiB per write request.
        buffer_chunk_limit 2M
        # Cap the combined memory usage of this buffer and the one below to
        # 2MiB/chunk * (6 + 2) chunks = 16 MiB
        buffer_queue_limit 6
        # Never wait more than 5 seconds before flushing logs in the non-error
        # case.
        flush_interval 5s
        # Never wait longer than 30 seconds between retries.
        max_retry_wait 30
        # Disable the limit on the number of retries (retry forever).
        disable_retry_limit
        # Use multiple threads for processing.
        num_threads 2
      </store>
    </match>
- path: /etc/systemd/system/logger.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=logging docker container
    Requires=network-online.target
    After=network-online.target

    [Service]
    Environment="HOME=/home/logger"
    ExecStartPre=/usr/share/google/dockercfg_update.sh
    ExecStartPre=/bin/mkdir -p /var/log/google-fluentd/
    ExecStartPre=-/usr/bin/docker rm -fv logger
    ExecStart=/usr/bin/docker run --rm -u 0 \
       --name=logger \
       -v /var/log/:/var/log/ \
       -v /var/lib/docker/containers:/var/lib/docker/containers \
       -v /etc/google-fluentd/:/etc/fluent/config.d/ \
       --env='FLUENTD_ARGS=-q' \
       gcr.io/google-containers/fluentd-gcp:2.0.17
    Restart=always
    RestartSec=1
runcmd:
- systemctl daemon-reload
- systemctl start logger.service
- systemctl start cloud-audit-setup

1voto

Xuewei Zhang Points 161

comment envoyer les journaux de l'hôte à Stackdriver ?

Ici sont quelques codes où COS a emballé un agent de journalisation Stackdriver. Vous pouvez le démarrer via sudo systemctl start stackdriver-logging .

0voto

Niklas B Points 52

L'équipe Google a répondu :

Pour avoir les logs de journald dans stackdriver, vous devrez configurer Fluentd pour le faire. Voir ces lignes de la carte de configuration de fluentd pour certains exemples. Notez que le filtre "node-journal" de la carte de configuration n'est pas activé par défaut sur GKE. activé par défaut sur GKE.

Pour avoir des audits sur les nœuds COS, vous devez en outre activer COS audit logging system service. Sur les nœuds COS : Exécutez "systemctl start cloud-audit-setup". Ensuite, vous aurez des journaux d'audit comme le login SSH dans journald.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X