blog.bressure.net

Application, Paramétrage

Graylog

admin

L’installation de Graylog dans sa version dockerisée est très facile. C’est même un euphémisme que de dire qu’un application dockerisée s’installe facilement. Sa mis en place dans mon infra basé sur Gitlab et docker-compose se fait dans les étapes décrites ci-dessous.

Déploiement en staging

Grâce à Traefik je peux mettre au point la plomberie dans un environnement iso-prod avant bascule en production. Pour cela j’utilise le fichier docker-compose.yml commun https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/docker-compose.yml

version: '3.7'
services:
  # MongoDB: https://hub.docker.com/_/mongo/
  mongo:
    image: mongo:3
  # Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.html
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10
    environment:
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    
  # Graylog: https://hub.docker.com/r/graylog/graylog/
  graylog:
    image: graylog/graylog:3.3
    depends_on:
      - mongo
      - elasticsearch

En environnement staging, ce fichier doit être complété par docker-compose.staging.yml https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/docker-compose.staging.yml

version: '3.7'
services:
  graylog:
   environment:
     - GRAYLOG_HTTP_EXTERNAL_URI=https://graylog.bressure.net:444/
   labels:
     - "traefik.http.routers.staging_graylog.entryPoints=staging"
     - "traefik.http.routers.staging_graylog.rule=Host(`graylog.bressure.net`)"
     - "traefik.docker.network=staging_traefik_backend"
   volumes:
     - '/srv/staging_graylog/config:/usr/share/graylog/data/config'
   networks:
      - default
      - outside
networks:
  outside:
     external: true
     name: staging_traefik_backend

L’intégration continue se fait par un .gitlab-ci.yml des plus classique pour mon infra https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/.gitlab-ci.yml

 image:
    name: docker/compose:1.24.0
    entrypoint: [""]
 before_script:
   - docker info
   - docker-compose version
   - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
 stages:
   - build
   - test
   - staging
   - production
   
 
 run_graylog:
   stage: test
   tags:
     - dind
     - infra
     - regular
     
   variables:
    # For non-Kubernetes executors, we use tcp://docker:2375/
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_TLS_CERTDIR: ""
    # When using dind, it's wise to use the overlayfs driver for
    # improved performance.
    DOCKER_DRIVER: overlay2
   services:
     - name: docker:dind     
       entrypoint: ["/bin/sh","-c" ,'echo "192.168.122.1 registry-backup.bressure.net registry-proxy.bressure.net">>/etc/hosts && dockerd-entrypoint.sh --insecure-registry registry-backup.bressure.net:5000 --insecure-registry registry-proxy.bressure.net:5000 --registry-mirror https://registry-proxy.bressure.net:5000' ]       
   script:
     - echo "run $CI_PROJECT_NAME  for testing"
     - docker-compose up -d
     - docker-compose ps
 #verify_running:
 #  stage: test
 #  tags: 
 #  image: golang # because I know it has curl installed
 #  script:
 #     - sleep 120
 #     - curl -v http://docker:8180
                         
    
 deploy_to_staging:
    stage: staging
    tags:
        - infra
        - docker
        - regular
    script:
        - echo "deploy  $CI_PROJECT_NAME  to staging"
        - docker-compose pull
        - docker-compose  -p staging_$CI_PROJECT_NAME -f docker-compose.yml -f docker-compose.staging.yml up -d
    environment:
        name: staging    
        url: https://graylog.bressure.net:444/
        on_stop: stop_staging
    only:
    - master        
 
 stop_staging:
    stage: staging
    tags:
        - infra
        - docker
        - regular
  
    variables:
        GIT_STRATEGY: none
    script:
        - echo "Remove  $CI_PROJECT_NAME "
        - docker-compose  -p staging_$CI_PROJECT_NAME -f docker-compose.yml -f docker-compose.staging.yml down
    when: manual
    environment:
        name: staging
        action: stop
 deploy_to_production:
    stage: production
    tags:
        - infra
        - docker
        - regular
    script:
        - echo "deploy to production"
        - docker-compose pull
        - docker-compose -f docker-compose.yml -f docker-compose.infra.yml up -d
    environment:
        name: production
        url: https://graylog.bressure.net/
        on_stop: stop_production
    only:
    - master
    when: manual
    
 stop_production:
    stage: production
    tags:
        - infra
        - docker
        - regular
  
    variables:
        GIT_STRATEGY: none
    script:
        - echo "Remove matomo"
        - docker-compose -f docker-compose.yml -f docker-compose.infra.yml  down
    when: manual
    environment:
        name: production
        action: stop

Afin de ne pas mettre les identifiants dans les fichiers docker-compose qui sont publiquement accessibles sur mon Gitlab, je choisi de les mettre dans le fichier de configuration exposés dans un volume docker sur l’hôte. Ainsi il faut sur l’hôte docker dans le répertoire /srv/staging_graylog/config

$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/3.3/config/graylog.conf
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/3.3/config/log4j2.xml

Puis dans le fichier graylog.conf il faut modifier password_secret, root_username et root_password_sha1.

DNS local

Le fichier /etc/hosts de la machine de test doit être configuré pour résoudre graylog.bressure.net car je n’ai pas (encore) de DNS local ! Et voilà, dans mon navigateur https://graylog.bressure.net:444/ me donne accès à la mire de login de Graylog:

Attention on lance des fusées

Déploiement en production

Quand on est satisfait de l’installation en staging, on peut déployer en production. A ce stade je n’ai pas encore paramétré mon instance de Graylog mais pour pouvoir y accéder depuis internet sur mon smartphone, un déploiement en production est utile. Pour cela le fichier docker-compose.infra.yml suivant vient s’ajouter https://gitlab.bressure.net/docker/applications/graylog/-/blob/master/docker-compose.infra.yml:

version: '3.7'
services:
  graylog:
   environment:
     - GRAYLOG_HTTP_EXTERNAL_URI=https://graylog.bressure.net/
   labels:
     - "traefik.http.routers.graylog.entryPoints=web"
     - "traefik.http.routers.graylog.rule=Host(`graylog.bressure.net`)"
     - "traefik.docker.network=traefik_backend"
   volumes:
     - '/srv/graylog/config:/usr/share/graylog/data/config'
   networks:
      - default
      - outside
networks:
  outside:
     external: true
     name: traefik_backend

On peut reprendre la configuration de staging pour la basculer en production en copier les volume docker /srv/staging_graylog vers /srv/graylog. Puis il reste à modifier le DNS publique pour y ajouter graylog.bressure.net.

Et voilà, mon instance graylog est disponible en production et avec son environnement de staging sur lequel je peux tester mes changement de configuration.

Tags:

Comments

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top