33800 Docs

← Retour
#!/bin/bash # Script d'installation Promtail pour centralisation logs # Usage: ./install-promtail.sh <hostname> <loki_url> set -e HOSTNAME="${1:-$(hostname)}" LOKI_URL="${2:-http://192.168.1.12:3100/loki/api/v1/push}" PROMTAIL_VERSION="2.9.0" ARCH="linux-amd64" echo "=== Installation Promtail sur $HOSTNAME ===" # 1. Télécharger Promtail si pas présent if [ ! -f /usr/local/bin/promtail ]; then echo "Téléchargement Promtail v${PROMTAIL_VERSION}..." cd /tmp wget -q "https://github.com/grafana/loki/releases/download/v${PROMTAIL_VERSION}/promtail-${ARCH}.zip" unzip -o promtail-${ARCH}.zip sudo mv promtail-${ARCH} /usr/local/bin/promtail sudo chmod +x /usr/local/bin/promtail rm -f promtail-${ARCH}.zip echo "Promtail installé" else echo "Promtail déjà présent" fi # 2. Créer répertoires sudo mkdir -p /etc/promtail /var/lib/promtail # 3. Générer config selon le hostname echo "Génération config pour $HOSTNAME..." sudo tee /etc/promtail/config.yml > /dev/null << EOF server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /var/lib/promtail/positions.yaml clients: - url: ${LOKI_URL} scrape_configs: # Syslog système - job_name: syslog static_configs: - targets: [localhost] labels: env: prod host: ${HOSTNAME} type: system service: syslog __path__: /var/log/syslog # Auth logs - job_name: auth static_configs: - targets: [localhost] labels: env: prod host: ${HOSTNAME} type: system service: auth __path__: /var/log/auth.log # Journal systemd - job_name: journal journal: max_age: 12h labels: env: prod host: ${HOSTNAME} type: system service: journal relabel_configs: - source_labels: ['__journal__systemd_unit'] target_label: unit EOF # 4. Config spécifique par machine case "$HOSTNAME" in gitlab) sudo tee -a /etc/promtail/config.yml > /dev/null << 'EOF' # GitLab application logs - job_name: gitlab-rails static_configs: - targets: [localhost] labels: env: prod host: gitlab type: app service: gitlab-rails __path__: /var/log/gitlab/gitlab-rails/*.log # GitLab Nginx - job_name: gitlab-nginx static_configs: - targets: [localhost] labels: env: prod host: gitlab type: access service: gitlab-nginx __path__: /var/log/gitlab/nginx/*.log # GitLab Sidekiq - job_name: gitlab-sidekiq static_configs: - targets: [localhost] labels: env: prod host: gitlab type: app service: gitlab-sidekiq __path__: /var/log/gitlab/sidekiq/*.log EOF ;; dev-portainer) sudo tee -a /etc/promtail/config.yml > /dev/null << 'EOF' # Docker containers logs - job_name: docker static_configs: - targets: [localhost] labels: env: dev host: dev-portainer type: app service: docker __path__: /var/lib/docker/containers/*/*-json.log pipeline_stages: - json: expressions: log: log stream: stream time: time - labels: stream: - output: source: log - timestamp: source: time format: RFC3339Nano EOF ;; jellyfin) sudo tee -a /etc/promtail/config.yml > /dev/null << 'EOF' # Jellyfin logs - job_name: jellyfin static_configs: - targets: [localhost] labels: env: prod host: jellyfin type: app service: jellyfin __path__: /var/lib/jellyfin/log/*.log EOF ;; esac # 5. Créer service systemd sudo tee /etc/systemd/system/promtail.service > /dev/null << EOF [Unit] Description=Promtail Log Agent Documentation=https://grafana.com/docs/loki/latest/clients/promtail/ After=network-online.target Wants=network-online.target [Service] Type=simple User=root ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/config.yml Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF # 6. Activer et démarrer sudo systemctl daemon-reload sudo systemctl enable promtail sudo systemctl restart promtail echo "=== Promtail installé et démarré sur $HOSTNAME ===" systemctl status promtail --no-pager | head -10