Contents
Overview
This tutorial will show you how to set up Graylog on your local machine and sending the log to it from a Java Application.
Technologies used
- Graylog
- Docker
- Spring Framework
- Log4j2
Steps
- Setup Graylog on your local machine by using
docker-compose up
the same folder where docker-compose.yaml locates - Write a Java application and integrate Log4j2 in it to send log messages to Graylog instance
Components
docker-compose.yaml
version: '2' services: # MongoDB: https://hub.docker.com/_/mongo/ mongodb: image: mongo:3 # Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docker.html elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:5.6.3 environment: - http.host=0.0.0.0 - transport.host=localhost - network.host=0.0.0.0 # Disable X-Pack security: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/security-settings.html#general-security-settings - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 mem_limit: 1g # Graylog: https://hub.docker.com/r/graylog/graylog/ graylog: image: graylog/graylog:2.4.6-1 environment: # CHANGE ME! - GRAYLOG_PASSWORD_SECRET=somepasswordpepper # Password: admin - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 - GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api links: - mongodb:mongo - elasticsearch depends_on: - mongodb - elasticsearch ports: # Graylog web interface and REST API - 9000:9000 # Syslog TCP - 514:514 # Syslog UDP - 514:514/udp # GELF TCP - 12201:12201 # GELF UDP - 12201:12201/udp
Log4j2.xml
<Configuration monitorInterval="300" status="WARN"> <properties> <property name="LOG_HOME">/tmp/xbatch_log</property> <property name="FILE_NAME">batchlog</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -- %msg%n"/> </Console> <GELF name="gelfAppender" server="127.0.0.1" port="12201" hostName="X-Batch" protocol="UDP"> <KeyValuePair key="environment" value="DEV"/> <KeyValuePair key="application" value="X-Batch"/> <KeyValuePair key="additionalFields" value="{'environment': 'TEST', 'application': 'MyAPP'}"/> </GELF> </Appenders> <Loggers> <Logger additivity="false" level="error" name="com.daimler.xbatch.gssn.step"> <AppenderRef ref="gelfAppender"/> </Logger> <Root level="info"> <AppenderRef ref="Console"/> <AppenderRef ref="gelfAppender"/> </Root> </Loggers> </Configuration>
pom.xml
Notice we should exclude the default log component
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
Full pom.xml is as below:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.andrew-programming</groupId> <artifactId>graylog-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>graylog-demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.graylog2.log4j2</groupId> <artifactId>log4j2-gelf</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>2.0.4.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
GraylogDemoApplication.java
package com.andrewprogramming.graylogdemo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class GraylogDemoApplication { public static void main(String[] args) { Logger logger = LogManager.getLogger(GraylogDemoApplication.class); logger.info("Application Start Running..."); logger.debug("Application Start Running..."); logger.error("Application Start Running..."); logger.warn("Application Start Running..."); SpringApplication.run(GraylogDemoApplication.class, args); } }
Screenshot
Java Application
Graylog
Run docker-compose up
in the same folder where docker-compose.yaml locates.
Open the browser and type http://localhost:9000 to login Graylog.
The password & username default is admin/admin
You may need a moment to let Graylog warm-up.
Click Sign in and choose input from the dashboard
Choose GELF UDP from the dropdown list and click the Launch new input button
Give this input a title as you want and choose the node then click save button
By default there only have one node to choose
Then a new Local inputs is shown below:
Running the application and check out the message in Graylog.
Click Show received messages button
there you go! You can see the log message sending from Java Application.
Prakashsinha Bayas
23 Nov 2019Hi Andrew,
Appreciate your efforts…
Just few couple of questions —
1 How to go-about application.properties? It is empty-one in this archive zip.
Also, please share github repository path instead of /along with such an archive zip.
kobe73er
29 Nov 2019application.properties file is empty because we don’t need edit anything.