👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles BĂźro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine StehhĂśhe
            • VW Bus Erfahrungen
          • Camper gross - StehhĂśhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • SpĂźlmaschine 2021
      • Hebe-SchiebetĂźr
      • Gasgrill
      • Minibar / Mini-KĂźhlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB TalentfĂśrderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Getting Started
  • Inputtypen
  • GELF-Protocol - Graylog Extended Log Format
  • Anwendungslogging
  • Automatisiertes Docker Deployment
  • Konfiguration
  • REST API

Was this helpful?

  1. Operations
  2. Logging

Graylog


Getting Started

Ich liebe Docker, denn damit funktioniert der Start innerhalb weniger Sekunden (http://docs.graylog.org/en/2.2/pages/installation/docker.html). Folgenden Inhalt als docker-compose.yml speichern

version: '2'
services:
  mongo:
    image: "mongo:3"
  elasticsearch:
    image: "elasticsearch:2"
    command: "elasticsearch -Des.cluster.name='graylog'"
  graylog:
    image: graylog2/server:2.2.1-1
    environment:
      GRAYLOG_PASSWORD_SECRET: somepasswordpepper
      GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      GRAYLOG_WEB_ENDPOINT_URI: http://127.0.0.1:9000/api
    depends_on:
      - mongo
      - elasticsearch
    ports:
      # Web UI
      - "9000:9000"
      # Input channel
      - "5555:5555"

und danach ein docker-compose. Wenige Sekunden später (nicht ungeduldig sein - es kann bis zu 30 Sekunden dauern) ist die UI per http://localhost:9000 erreichbar und man kann sich mit admin:admin einloggen.

Die Daten werden auch erstmal nur im Container persistiert ... sind also weg, wenn man man den Container lĂśscht. Im Abschnitt Automatisiertes Docker Deployment werde ich einige Verbesserungen beschreiben.

Zunächst muß man Graylog einen Input-Kanal verpassen (System - Inputs), über den Nachrichten reinkommen können. Am besten verwendet man einen ganz einfachen Plaintext TCP oder Plaintext UDP Inputkanal. Dann kann man per Netcat über die Konsole Nachrichten zum Inputkanal schicken:

echo "first log message" | nc -w 0 -u 127.0.0.1 5555

... und voila - kurze Zeit später - findet man den Eintrag ßber die Suche im Graylog.


Inputtypen

Folgende InputmĂśglichkeiten stehen out-of-the-box zur VerfĂźgung:

  • Plaintext TCP, UDP, Kafka, AMQP

  • Syslog TCP, UDP, Kafka, AMQP

  • GELF TCP, UDP, Kafka, AMQP, HTTP

  • Beats

Man kann in Graylog dann ein entsprechendes Parsing definieren und vornehmen - ich bin mir aber nicht sicher wie performant und komfortabel das ist. Wahrscheinlich ist es besser, Ansätze wir Fluentd zu verwenden oder gleich JSON-basierte Log-Daten zu schicken (z. B. GELF-Format).

GELF-Protocol - Graylog Extended Log Format

  • Protocol Beschreibung

Das GELF-Format ist ein sehr einfaches JSON-Format. Das GELF-Protocol ist ein Protokoll, das die Nutzdaten im GELF-Format verschickt.


Anwendungslogging

  • siehe auch in diesem Abschnitt

Microservices sind derzeit ein Hype, der die Notwendigkeit eines zentralen Log-Reportings erhÜht. Niemand kann die vielen Log-Files auswerten, wenn sie nicht irgendwo gesammelt werden. Hier haben sich Ansätze wie Graylog und ELK etabliert, die ein komfortable UI Schnittstelle (und REST-Schnittstellen) zur Auswertung der Logs bietet.

Graylog hat mit GELF sogar ein eigenes Log-Format aus der Taufe gehoben und bietet für verschiedenen Programmiersprachen APIs an. Über GELF lassen sich auch Logs von Windows-Maschinen integrieren.

Um Java-Logs ins Graylog zu bekommen, muß man an der Anwendung i. a. nichts verändert. Meistens verwenden die Anwendnungen eh schon Java-Logging und hierfür gibt es den sog. GelfAppender, den man in die log4j Konfiguration integriert:

<appender name="GELF" class="me.moocar.logbackgelf.GelfAppender">
        <graylog2ServerHost>localhost</graylog2ServerHost>
        <graylog2ServerPort>5559</graylog2ServerPort>
        <useLoggerName>true</useLoggerName>
        <useThreadName>true</useThreadName>
        <messagePattern>%m%n%ex{full}</messagePattern>
        <shortMessagePattern>%m%.-250rEx{short}</shortMessagePattern>
        <includeFullMDC>true</includeFullMDC>
        <hostName>localhost</hostName>
        <staticAdditionalField>anyfield:anyvalue</staticAdditionalField>
</appender>

Anschließend benötigt Graylog aber noch einen GELF- Inputkanal (System - Inputs), der an den o. a. Port 5559 gebunden wird.


Automatisiertes Docker Deployment

Mit dem Getting Started Ansatz bekommt man zunächst nur einen leeren Graylog Server zum Laufen. Man will die Konfiguration aber nicht immer wieder erneuern, wenn man den Container neu aufsetzt (z. B. wegen eines Image Updates). Außerdem nöchte man die Konfiguration evtl. unter Versionskontrolle stellen.

Konfiguration

Graylog bietet die MÜglichkeit sog. Content-Packages zu exportieren/importieren ... und das bereits beim Startup oder aber auch während des laufenden Betriebs. Auf diese kann man auch leicht Konfigurationen zwischen Servern austauschen.

Für den automatischen Import eines Content-Packages (hier my-contentPack.json) beim Serverstart muß folgende Konfiguration (graylog.conf) vorgenommen werden:

content_packs_loader_enabled = true
content_packs_dir = /usr/share/graylog/data/contentpacks
content_packs_auto_load = grok-patterns.json, my-contentPack.json

Alternative: MongoDB dump/restore

  • https://docs.mongodb.com/manual/tutorial/backup-and-restore-tools/

Graylog verwendet MongoDB als Storage fĂźr die Konfiguration. Dementsprechend kann man die gesamte (!!!) Konfiguration sichern (mongodump --out /dump/ --db graylog) und wiederherstellen (mongorestore --db=graylog /dump/graylog).

REST API

  • http://docs.graylog.org/en/2.2/pages/configuration/rest_api.html

Die REST API kann bei einigen Dingen sehr hilfreich sein. Über System - Nodes - API browser gelangt man zu einem Swagger-UI, mit dem sich die REST-Schnittstelle aus dem Browser heraus bedienen läßt.

PreviousLoggingNextFluentd

Last updated 3 years ago

Was this helpful?