Logging with Symfony - Graylog
Docker-compose configuration
Graylog need elasticsearch and mongodb to store and index data.
Let's create our docker-compose file:
version: '3.7'
services:
#[...]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
environment:
- node.name=elasticsearch
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
mongodb:
image: "mongo:4.2"
restart: always
graylog:
image: "graylog/graylog:4.3.2"
depends_on:
- elasticsearch
- mongodb
entrypoint: "/usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh"
environment:
GRAYLOG_PASSWORD_SECRET: somepasswordpepper
# to generate a password hash, type: echo -n admin | shasum -a 256
GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9001"
GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost:9001/"
GRAYLOG_ELASTICSEARCH_HOSTS: "http://elasticsearch:9200"
GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
ports:
- "5044:5044/tcp" # Beats
- "5140:5140/udp" # Syslog
- "5140:5140/tcp" # Syslog
- "5555:5555/tcp" # RAW TCP
- "5555:5555/udp" # RAW TCP
- "9001:9001/tcp" # Server API
- "12201:12201/tcp" # GELF TCP
- "12201:12201/udp" # GELF UDP
- "13301:13301/tcp" # Forwarder data
- "13302:13302/tcp" # Forwarder config
volumes:
esdata:
Install Monolog on your project
Monolog bundle integrates Monolog into Symfony, it comes with many handlers like slack, elasticsearch and Graylog
composer require symfony/monolog-bundle
Install the gelf implementation in php
composer require graylog2/gelf-php
Now go to the /config/packages/dev/monolog.yaml
As you can see the there are 2 handlers:
- "streams" write all logs into a file
- "console" allow you to see logs on your terminal when you execute a task with the option -vvv
Now add the new handler to send all logs in graylog:
monolog:
handlers:
# [...]
graylog:
type: gelf
publisher:
hostname: "%env(GRAYLOG_HOST)%"
port: "%env(GRAYLOG_PORT)%"
level: debug
Then add this 2 new env variable in your .env file
#[...]
GRAYLOG_HOST=localhost
GRAYLOG_PORT=12201
Configure a new input in graylog
Go to http://localhost:9001/ then connect you with the credentials: admin/admin
Then go to System/Inputs, select "GELF UDP" then click on launch input.
Test
Go to your website then go back to your graylog dashboard, now you can see all the logs :)
Top comments (0)