Howto put your symfony logs into ELK with filebeat

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"
		}
	}
}

gmail via rss

auf Google Mail kann man auch per RSS zugreifen, was für selten verwendete Accounts sehr praktisch sein kann. Das ganze funktioniert sowohl für Gmail, als auch für Google Apps. Die Authentifizierung erfolgt per Basic Authentication also username:password@yourdomain.
Die URLs sind dann:

Gmail:

https://mail.google.com/mail/feed/atom

Google Apps:

https://mail.google.com/a/yourdomain/feed/atom

schicke last.fm statistiken erstellen

das erste mal habe diese art der darstellung von last.fm daten in einem vortrag zum thema processing von michael schuster beim barcamp im juni in wien gesehen. leider gab es dort nur schicke bilder und kein tool zum selber erstellen mit den eigenen daten. vor einer weile bin ich aber über Last.fm Extra Stats (windows only) gestossen mit dem man das nur doch machen kann.

Javascript Image Popup mit jQuery

das Original habe ich bei The Life of Me gefunden, da es aber nicht so ganz funktioniert hat hier mal meine Version
Wir haben hier eine ganz normale Galerie Seite mit Thumbnail Bilder die jeweils auf die grosse Version des Bildes verlinken. Wenn wir jetzt dem Link folgen bekommen wir eine neue Seite mit dem Bild aber schick ist das nicht.

[source language=”:xhtml”]
<div id="images">
<div class="image">
<a class="imageLink" href="images_russia/russia_01.jpg" alt="" target="_blank">
<img src="images_russia/russia_01_tb.jpg" alt=""/>
</a>
</div>
<div class="image">
<a class="imageLink" href="images_russia/russia_02.jpg" alt="" target="_blank">
<img src="images_russia/russia_02_tb.jpg" alt=""/>
</a>
</div>
<div class="image">
<a class="imageLink" href="images_russia/russia_03.jpg" alt="" target="_blank">
<img src="images_russia/russia_03_tb.jpg" alt=""/>
</a>
</div>
</div>[/source]

Was ich wollte war ein Popup ohne Toolbar in genau der Größe des Bildes, denn Bilder haben natürlich alle unterschiedliche Größen.

Hier kommt jetzt jQuery zum Einsatz.

  1. wir setzen bei einem #hidden Bild den Src auf das Ziel des Links
  2. dann holen wir uns mit jQuery die Größe des Bildes
  3. wir löschen den Src Wert beim #hidden Bild wieder
  4. nun öffnen wir ein neues Fenster mit genau der Größe das Bildes

[source language=”:js”]
$(document).ready(function(){
$(".imageLink").click(function(){
$("#hidden").attr("src",$(this).attr(‘href’));
var href = $(this).attr(‘href’);
var description = $(this).attr(‘alt’);
var width = $(‘#hidden’).width() + 15;
var height = $(‘#hidden’).height() + 15;
$("#hidden").attr("src","");
new_window = window.open(href,’popup’,’width=’ + width + ‘,height=’ + height + ‘toolbar="no",scrollbars="no",menubar="no"’);
new_window.document.write("<html><head><title>Nora Erdmann – pictures from Russia</title>");
new_window.document.write("\<script type=\"text/javascript\"> function resize()\{ window.resizeTo(" + width + "," + height + "); \}\< \/script\>");
new_window.document.write("<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"></link></script></head><body onLoad=\"resize()\">");
new_window.document.write("<a href=\"javascript:window.close()\"><img src=\"" + href + "\" title=\"" + description +"\" id=\"popup_img\"/>");
new_window.document.write("</a></body></html>");
new_window.document.close();
return false;
});
});
[/source]