21 KiB
đ§Ș Fake Log Generator for Loki
Ce projet génÚre de faux logs réalistes dans plusieurs formats (apache, json, ltsv, custom) et les envoie à Grafana Loki via Promtail.
đ§ DĂ©marrage rapide
docker compose up -d
./fake_logs.sh 0 json --loop >> logs/access.log
đ AccĂšs
- Grafana : http://localhost:3000 (admin / admin)
- Loki : http://localhost:3100
đ RequĂȘte exemple (Grafana Explore)
{job="fake_logs"}
đŠ Contenu
fake_logs.sh: générateur de logspromtail-config.yml: config pour envoyer vers Lokidocker-compose.yml: stack Loki + Promtail + Grafana
FROM AI Exemple de script Bash : fake_logs.sh #!/bin/bash
Nombre de lignes de log à générer (par défaut : 100)
LINES=${1:-100}
Listes de données factices
METHODS=("GET" "POST" "PUT" "DELETE" "PATCH") PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout") CODES=(200 201 204 301 302 400 401 403 404 500 503) AGENTS=( "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" "curl/7.68.0" "PostmanRuntime/7.29.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)" )
Fonction pour générer une IP aléatoire
random_ip() { echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))" }
Fonction pour générer une date au format Apache
random_date() { date -d "$((RANDOM % 30 + 1)) days ago" "+%d/%b/%Y:%H:%M:%S %z" }
Boucle de génération de log
for ((i=0; i<LINES; i++)); do IP=$(random_ip) DATE=$(random_date) METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]} PATH=${PATHS[$RANDOM % ${#PATHS[@]}]} CODE=${CODES[$RANDOM % ${#CODES[@]}]} SIZE=$((RANDOM % 5000 + 200)) AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]}
echo "$IP - - [$DATE] "$METHOD $PATH HTTP/1.1" $CODE $SIZE "$AGENT"" done đ§ Utilisation Rends le script exĂ©cutable : chmod +x fake_logs.sh ExĂ©cute-le : ./fake_logs.sh 500 > access.log (Cela gĂ©nĂ©rera 500 lignes de logs dans un fichier access.log) đ Exemple de sortie : 92.123.44.222 - - [15/May/2025:14:23:01 +0000] "GET /api/data HTTP/1.1" 200 3412 "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" 14.56.222.1 - - [10/May/2025:18:43:51 +0000] "POST /login HTTP/1.1" 401 834 "curl/7.68.0" Souhaites-tu quâon ajoute la prise en charge de plusieurs formats de log (JSON, Apache, LTSV, etc.) comme le fait flog ?
Vous avez dit : oui ChatGPT a dit : ParfaitâŻ! Voici une version Ă©tendue du script Bash fake_logs.sh qui permet de gĂ©nĂ©rer des logs en plusieurs formats comme le fait mingrammer/flog : apache, json, ltsv, ou custom.
â Script Bash : fake_logs.sh (multi-formats)
#!/bin/bash
Nombre de lignes à générer
LINES=${1:-100} FORMAT=${2:-apache} # apache | json | ltsv | custom
METHODS=("GET" "POST" "PUT" "DELETE" "PATCH") PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout") CODES=(200 201 204 301 302 400 401 403 404 500 503) AGENTS=( "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" "curl/7.68.0" "PostmanRuntime/7.29.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)" )
random_ip() { echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))" }
random_date() { date -d "$((RANDOM % 30 + 1)) days ago" "+%d/%b/%Y:%H:%M:%S %z" }
iso_date() { date -d "$((RANDOM % 30 + 1)) days ago" --iso-8601=seconds }
Fonction principale de génération de logs
generate_log() { IP=$(random_ip) DATE=$(random_date) ISO_DATE=$(iso_date) METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]} PATH=${PATHS[$RANDOM % ${#PATHS[@]}]} CODE=${CODES[$RANDOM % ${#CODES[@]}]} SIZE=$((RANDOM % 5000 + 200)) AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]}
case "$FORMAT" in apache) echo "$IP - - [$DATE] "$METHOD $PATH HTTP/1.1" $CODE $SIZE "$AGENT"" ;; json) echo "{"ip":"$IP","timestamp":"$ISO_DATE","method":"$METHOD","path":"$PATH","code":$CODE,"size":$SIZE,"agent":"$AGENT"}" ;; ltsv) echo "host:$IP\ttime:$ISO_DATE\tmethod:$METHOD\tpath:$PATH\tstatus:$CODE\tsize:$SIZE\tagent:$AGENT" ;; custom) echo "[$ISO_DATE] $IP | $METHOD $PATH => $CODE ($SIZE bytes)" ;; *) echo "Format inconnu : $FORMAT" >&2 exit 1 ;; esac }
Boucle de génération
for ((i=0; i<LINES; i++)); do generate_log done đ§ Utilisation
Rends-le exĂ©cutable : chmod +x fake_logs.sh Utilisation de base : ./fake_logs.sh 100 apache # format apache (par dĂ©faut) ./fake_logs.sh 50 json # format JSON ./fake_logs.sh 20 ltsv # format LTSV ./fake_logs.sh 10 custom # format personnalisĂ© Rediriger vers un fichier : ./fake_logs.sh 100 json > logs.json đ§Ș Exemples
Format apache 173.29.44.102 - - [17/May/2025:12:04:10 +0000] "GET /dashboard HTTP/1.1" 200 2641 "curl/7.68.0" Format json {"ip":"244.51.138.41","timestamp":"2025-05-06T13:32:01+00:00","method":"POST","path":"/login","code":403,"size":876,"agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)"} Format ltsv host:201.34.118.72 time:2025-05-22T08:17:14+00:00 method:GET path:/api/data status:200 size:2123 agent:PostmanRuntime/7.29.0 Format custom [2025-05-14T07:10:33+00:00] 102.144.33.111 | PUT /checkout => 201 (4321 bytes) Souhaites-tu que j'ajoute aussi :
la génération en continu (mode --loop) des logs dans des fichiers séparés (erreur/access) une version Dockerisée ? Je peux aussi écrire une version Python plus puissante si tu veux aller plus loin.
Vous avez dit : Souhaites-tu que j'ajoute aussi :
la gĂ©nĂ©ration en continu (mode --loop) des logs dans des fichiers sĂ©parĂ©s (erreur/access) une version DockerisĂ©e ? oui ChatGPT a dit : ParfaitâŻ! Voici une version complĂšte de fake_logs.sh avec gĂ©nĂ©ration continue (--loop), fichiers sĂ©parĂ©s (access.log / error.log), et image Docker.
đ Script Bash complet : fake_logs.sh
#!/bin/bash
Nombre de lignes par défaut
LINES=${1:-100} FORMAT=${2:-apache} MODE=$3
METHODS=("GET" "POST" "PUT" "DELETE" "PATCH") PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout") CODES_OK=(200 201 204 301 302) CODES_ERR=(400 401 403 404 500 503) AGENTS=( "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" "curl/7.68.0" "PostmanRuntime/7.29.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)" )
random_ip() { echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))" }
random_date() { date "+%d/%b/%Y:%H:%M:%S %z" }
iso_date() { date --iso-8601=seconds }
generate_log() { IP=$(random_ip) DATE=$(random_date) ISO_DATE=$(iso_date) METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]} PATH=${PATHS[$RANDOM % ${#PATHS[@]}]} AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]} SIZE=$((RANDOM % 5000 + 200))
Choix entre code OK ou erreur (20% erreurs)
if (( RANDOM % 10 < 2 )); then CODE=${CODES_ERR[$RANDOM % ${#CODES_ERR[@]}]} FILE="error.log" else CODE=${CODES_OK[$RANDOM % ${#CODES_OK[@]}]} FILE="access.log" fi
case "$FORMAT" in apache) LOG="$IP - - [$DATE] "$METHOD $PATH HTTP/1.1" $CODE $SIZE "$AGENT"" ;; json) LOG="{"ip":"$IP","timestamp":"$ISO_DATE","method":"$METHOD","path":"$PATH","code":$CODE,"size":$SIZE,"agent":"$AGENT"}" ;; ltsv) LOG="host:$IP time:$ISO_DATE method:$METHOD path:$PATH status:$CODE size:$SIZE agent:$AGENT" ;; custom) LOG="[$ISO_DATE] $IP | $METHOD $PATH => $CODE ($SIZE bytes)" ;; *) echo "Format inconnu : $FORMAT" >&2 exit 1 ;; esac
echo "$LOG" >> "$FILE" echo "$LOG" }
Fonction de génération continue
generate_loop() { while true; do generate_log sleep 0.5 done }
Exécution
if ; then generate_loop else for ((i=0; i<LINES; i++)); do generate_log done fi đł Dockerfile
Voici un Dockerfile pour exécuter ton générateur de logs dans un conteneur :
FROM bash:5.2
WORKDIR /app COPY fake_logs.sh . RUN chmod +x fake_logs.sh
CMD ["./fake_logs.sh", "100", "apache"] đ§ Construction et ExĂ©cution avec Docker
- Construire l'image : docker build -t fake-logs .
- Lancer une génération simple : docker run --rm fake-logs
- Lancer en boucle continue (utile pour tests de pipelines, ELK, etc.) : docker run --rm fake-logs ./fake_logs.sh 0 apache --loop
- Monter un volume pour rĂ©cupĂ©rer les fichiers : docker run --rm -v $(pwd)/logs:/app/logs -w /app fake-logs ./fake_logs.sh 100 json đ RĂ©sultat
access.log : requĂȘtes rĂ©ussies (200, 201, etc.) error.log : requĂȘtes Ă©chouĂ©es (404, 500, etc.) Supporte : 4 formats : apache, json, ltsv, custom Mode boucle avec --loop SĂ©paration access/error Souhaites-tu aussi :
Un script pour envoyer ces logs vers un serveur (syslog, fluentd, etc.) ? Un service systemd pour gĂ©nĂ©rer des logs sur une VM ? Une interface Web pour dĂ©clencher/paramĂ©trer la gĂ©nĂ©ration ? Je peux aussi tâaider Ă lâintĂ©grer Ă une stack ELK, Loki, etc.
Vous avez dit : loki ChatGPT a dit : ParfaitâŻ! IntĂ©grer tes faux logs gĂ©nĂ©rĂ©s en Bash Ă Grafana Loki est une excellente idĂ©e pour tester une stack dâobservabilitĂ©.
Voici un guide complet pour envoyer tes logs générés par fake_logs.sh vers Loki, avec ou sans Docker, et visualiser dans Grafana.
đ§± Architecture cible
[fake_logs.sh] --> [Promtail] --> [Loki] --> [Grafana] â Ătapes
- âïž Lancer une stack Loki + Grafana + Promtail via Docker Compose CrĂ©e un fichier docker-compose.yml :
version: '3.7'
services: loki: image: grafana/loki:2.9.4 ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml
promtail: image: grafana/promtail:2.9.4 volumes: - ./logs:/var/log/fake - ./promtail-config.yml:/etc/promtail/promtail.yml command: -config.file=/etc/promtail/promtail.yml
grafana: image: grafana/grafana:10.2.0 ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana-storage:/var/lib/grafana
volumes: grafana-storage: 2. đ Fichier promtail-config.yml server: http_listen_port: 9080 grpc_listen_port: 0
positions: filename: /tmp/positions.yaml
clients:
scrape_configs:
- job_name: fake_logs
static_configs:
- targets:
- localhost labels: job: fake_logs path: /var/log/fake/.log Ce fichier dit Ă Promtail de lire les fichiers dans ./logs/.log et de les pousser vers Loki.
- targets:
- đ Lancer la stack docker compose up -d Grafana sera sur http://localhost:3000 (login: admin / admin) Loki sur port 3100 Promtail lit les fichiers dans ./logs
- đ Lancer ton script fake_logs.sh Assure-toi que les logs sont bien Ă©crits dans ./logs/ : mkdir -p logs ./fake_logs.sh 100 json > logs/access.log ./fake_logs.sh 50 json > logs/error.log Ou en continu : ./fake_logs.sh 0 json --loop >> logs/access.log Tu peux aussi Dockeriser la gĂ©nĂ©ration de logs : Monte ./logs comme volume dans le conteneur du gĂ©nĂ©rateur.
- đ Visualiser dans Grafana Va dans Grafana : http://localhost:3000 Ajoute Loki comme source de donnĂ©es : URL : http://loki:3100 Va dans Explore ExĂ©cute une requĂȘte comme : {job="fake_logs"} Tu verras tous les logs poussĂ©s par Promtail !
đ Automatiser tout ça (bonus)
Tu peux crĂ©er un Dockerfile pour fake_logs.sh comme gĂ©nĂ©rateur, et lâexĂ©cuter dans le mĂȘme rĂ©seau que Promtail/Loki, pour simuler une vraie application.
â RĂ©sumĂ©
Composant RĂŽle fake_logs.sh GĂ©nĂšre des logs rĂ©alistes Promtail Lit les fichiers .log et les envoie Ă Loki Loki Stocke et indexe les logs Grafana Visualise et interroge les logs Souhaites-tu un repo GitHub prĂȘt Ă cloner avec tout ça dedans ? Je peux te gĂ©nĂ©rer une structure complĂšte immĂ©diatement.
Vous avez dit : oui mais sur https://gitweb.dyndns.org ChatGPT a dit : Merci pour la précision !
đ§ Contexte https://gitweb.dyndns.org semble ĂȘtre un serveur Git auto-hĂ©bergĂ© utilisant GitWeb. Ce type d'interface web ne permet pas directement de pousser des dĂ©pĂŽts, comme le fait GitHub ou GitLab. Au lieu de cela, tu dois :
CrĂ©er un dĂ©pĂŽt Git sur ton serveur Pousser ton projet localement ou via SSH Ensuite, GitWeb affichera le contenu automatiquement đ Ătapes pour dĂ©ployer ton projet sur gitweb.dyndns.org
â 1. PrĂ©pare le projet en local Structure du projet :
fake-log-generator/ âââ fake_logs.sh âââ logs/ # (vides, ignorĂ©s) âââ Dockerfile âââ promtail-config.yml âââ docker-compose.yml âââ .gitignore .gitignore
logs/ *.log Initialise Git :
cd fake-log-generator git init git add . git commit -m "Initial commit of fake log generator for Loki" â 2. Connecte-toi Ă ton serveur Git Si ton serveur GitWeb est bien configurĂ© en tant que serveur Git SSH, il te faut une ligne comme :
git remote add origin ssh://user@gitweb.dyndns.org:/srv/git/fake-log-generator.git Ou si tu utilises git-shell :
git remote add origin user@gitweb.dyndns.org:fake-log-generator.git â 3. Pousse ton projet git push -u origin master â ïž VĂ©rifie que tu as bien les droits en Ă©criture sur le rĂ©pertoire Git distant (/srv/git/âŠ). â 4. Configure GitWeb (si pas dĂ©jĂ fait) Assure-toi que :
Ton dĂ©pĂŽt est bien placĂ© dans le rĂ©pertoire lu par GitWeb (souvent /srv/git/) Le fichier description existe : echo "Fake log generator for Loki" > /srv/git/fake-log-generator.git/description Le dĂ©pĂŽt est en mode bare : git init --bare /srv/git/fake-log-generator.git â Bonus : contenu complet prĂȘt Ă copier
Souhaites-tu que je te gĂ©nĂšre un .zip de ce projet prĂȘt Ă envoyer, ou que je tâaffiche le contenu de chaque fichier ici pour que tu le copies facilement ?
Je peux aussi tâaider Ă :
Automatiser les tests via GitHub Actions ou autre Générer un tag/version Ajouter un README.md avec les instructions Souhaites-tu tout ça ?
Vous avez dit : oui ChatGPT a dit : ParfaitâŻ! Voici le projet complet du gĂ©nĂ©rateur de logs pour Loki, prĂȘt Ă ĂȘtre copiĂ© et poussĂ© sur ton dĂ©pĂŽt GitWeb (gitweb.dyndns.org).
đ Structure du projet : fake-log-generator
fake-log-generator/ âââ fake_logs.sh âââ docker-compose.yml âââ Dockerfile âââ promtail-config.yml âââ .gitignore âââ README.md đ 1. fake_logs.sh
#!/bin/bash
LINES=${1:-100} FORMAT=${2:-apache} MODE=$3
METHODS=("GET" "POST" "PUT" "DELETE" "PATCH") PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout") CODES_OK=(200 201 204 301 302) CODES_ERR=(400 401 403 404 500 503) AGENTS=( "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" "curl/7.68.0" "PostmanRuntime/7.29.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)" )
mkdir -p logs
random_ip() { echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))" }
random_date() { date "+%d/%b/%Y:%H:%M:%S %z" }
iso_date() { date --iso-8601=seconds }
generate_log() { IP=$(random_ip) DATE=$(random_date) ISO_DATE=$(iso_date) METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]} PATH=${PATHS[$RANDOM % ${#PATHS[@]}]} AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]} SIZE=$((RANDOM % 5000 + 200))
if (( RANDOM % 10 < 2 )); then CODE=${CODES_ERR[$RANDOM % ${#CODES_ERR[@]}]} FILE="logs/error.log" else CODE=${CODES_OK[$RANDOM % ${#CODES_OK[@]}]} FILE="logs/access.log" fi
case "$FORMAT" in apache) LOG="$IP - - [$DATE] "$METHOD $PATH HTTP/1.1" $CODE $SIZE "$AGENT"" ;; json) LOG="{"ip":"$IP","timestamp":"$ISO_DATE","method":"$METHOD","path":"$PATH","code":$CODE,"size":$SIZE,"agent":"$AGENT"}" ;; ltsv) LOG="host:$IP time:$ISO_DATE method:$METHOD path:$PATH status:$CODE size:$SIZE agent:$AGENT" ;; custom) LOG="[$ISO_DATE] $IP | $METHOD $PATH => $CODE ($SIZE bytes)" ;; *) echo "Format inconnu : $FORMAT" >&2 exit 1 ;; esac
echo "$LOG" >> "$FILE" echo "$LOG" }
if ; then while true; do generate_log sleep 0.5 done else for ((i=0; i<LINES; i++)); do generate_log done fi đł 2. Dockerfile
FROM bash:5.2
WORKDIR /app COPY fake_logs.sh . RUN chmod +x fake_logs.sh
CMD ["./fake_logs.sh", "100", "json"] đ§± 3. docker-compose.yml
version: '3.7'
services: loki: image: grafana/loki:2.9.4 ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml
promtail: image: grafana/promtail:2.9.4 volumes: - ./logs:/var/log/fake - ./promtail-config.yml:/etc/promtail/promtail.yml command: -config.file=/etc/promtail/promtail.yml
grafana: image: grafana/grafana:10.2.0 ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana-storage:/var/lib/grafana
volumes: grafana-storage: đŠ 4. promtail-config.yml
server: http_listen_port: 9080 grpc_listen_port: 0
positions: filename: /tmp/positions.yaml
clients:
scrape_configs:
- job_name: fake_logs
static_configs:
- targets:
- localhost labels: job: fake_logs path: /var/log/fake/*.log đ 5. .gitignore
- targets:
logs/ *.log đ 6. README.md
đ§Ș Fake Log Generator for Loki
Ce projet génÚre de faux logs réalistes dans plusieurs formats (apache, json, ltsv, custom) et les envoie à Grafana Loki via Promtail.
đ§ DĂ©marrage rapide
docker compose up -d
./fake_logs.sh 0 json --loop >> logs/access.log
đ AccĂšs
Grafana : http://localhost:3000 (admin / admin)
Loki : http://localhost:3100
đ RequĂȘte exemple (Grafana Explore)
{job="fake_logs"}
đŠ Contenu
fake_logs.sh : générateur de logs
promtail-config.yml : config pour envoyer vers Loki
docker-compose.yml : stack Loki + Promtail + Grafana
---
## đ Ătapes suivantes pour GitWeb
1. Initialise Git dans le dossier :
```bash
git init
git remote add origin ssh://user@gitweb.dyndns.org:/srv/git/fake-log-generator.git
git add .
git commit -m "Initial fake log project for Loki"
git push -u origin master
Vérifie que description, HEAD, etc. sont bien en place sur le serveur (mode bare repo).
Souhaites-tu que je te prépare une archive .zip contenant tout ce projet ? Je peux aussi générer les fichiers individuellement si tu le souhaites.
Vous avez dit :
oui
ChatGPT a dit :
đŠ Ton projet est prĂȘt !
Tu peux tĂ©lĂ©charger lâarchive contenant le gĂ©nĂ©rateur de faux logs pour Loki ici :
đ fake-log-generator.zip
Cette archive contient :
fake_logs.sh (le générateur de logs)
Dockerfile + docker-compose.yml
promtail-config.yml
.gitignore
README.md
Tu peux maintenant le décompresser, le tester localement ou le pousser directement sur ton dépÎt GitWeb.
Souhaites-tu aussi un exemple de configuration pour intégrer ça dans un dashboard Grafana ?
Vous avez dit :
oui
ChatGPT a dit :
ParfaitâŻ! Voici un exemple complet de tableau de bord Grafana pour visualiser les logs gĂ©nĂ©rĂ©s par ton script fake_logs.sh via Loki.
đ Dashboard Grafana pour les logs fake_logs
đ MĂ©thode 1 : Import manuel via JSON
Tu peux importer le JSON suivant dans Grafana :
đ JSON de Dashboard (extrait)
Voici un extrait (je peux te fournir le .json complet si tu préfÚres en fichier) :
{
"dashboard": {
"title": "Fake Log Generator Dashboard",
"panels": [
{
"type": "logs",
"title": "Logs récents (Loki)",
"targets": [
{
"expr": "{job=\"fake_logs\"}",
"refId": "A"
}
],
"options": {
"dedupStrategy": "none",
"showTime": true,
"showLabels": true
},
"gridPos": { "x": 0, "y": 0, "w": 24, "h": 10 }
},
{
"type": "stat",
"title": "Nombre total de logs",
"targets": [
{
"expr": "count_over_time({job=\"fake_logs\"}[1m])",
"refId": "B"
}
],
"gridPos": { "x": 0, "y": 10, "w": 6, "h": 6 }
},
{
"type": "piechart",
"title": "Répartition par code HTTP",
"targets": [
{
"expr": "count_over_time({job=\"fake_logs\"} |= \"HTTP\" | regexp \"\\\" ([0-9]{3}) \" | unwrap code [1m]) by (code)",
"refId": "C"
}
],
"gridPos": { "x": 6, "y": 10, "w": 9, "h": 6 }
}
],
"schemaVersion": 36,
"version": 1
}
}
đ„ Importer dans Grafana
Ouvre Grafana : http://localhost:3000
Va dans Dashboards > New > Import
Colle le JSON ci-dessus ou charge un fichier .json
Sélectionne ta source Loki comme "data source"
đ Astuces LogQL utiles pour Grafana Explore
Tous les logs :
{job="fake_logs"}
Logs d'erreurs :
{job="fake_logs"} |= " 5" or |= " 4"
Filtrer par méthode HTTP :
{job="fake_logs"} |= "POST"