TL;DR
Log messages in your symfony app with fields in the logging context and make them available in Kibana for reporting.
- write logfiles logstash formated into a file
- use filebeat to transfer them logstash
- post process them with logstash
- put them in elasticsearch to view them with kibana
logging in symfony controller
$logger = $this->get('monolog.logger.elk');
$logger->info(‘niepi.someMessage’, ['value1' => $value1, 'value2’ => $value2]);
logger config (app/config/config.yml)
monolog:
channels: [ "elk"]
…
kibana:
type:stream
path:"%kernel.logs_dir%/elk.log"
formatter: service.elkformater
action_level: info
channels: ["elk"]
formater config (src/AppBundle/Resources/config/services.yml)
service.elkformater:
class: Monolog\Formatter\LogstashFormatter
arguments:
- 'appName'
- ~
- ~
- ~
- 1
filebeat config (/etc/filebeat/filebeat.yml)
…
filebeat:
prospectors:
-
paths:
- “/%APP_LOCATION%/app/logs/elk.log"
document_type: application # this is just an identifier for logstash
Logstash config
filter {
if [type] == "application" {
json{
source => "message"
}
}
}