← 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