printf
to logging indusrializationChristophe Mosa
(what I try not to talk about)
1995: $500/GB
2000: $10/GB
Today: $0.04/GB
Distributed computing for everyone
Data processing cost is (relatively) ridiculous
Devs
Ops
Business
Debug
Test
System failures
Performance bottlenecks
Deployment effects/consequences
$$$
$$$
Analyze data, get insights, detect patterns, predict the future...
It's a good idea to let developers debug as they like
just give them the right tools
... but teach them basics about logging
Metrics aggregates
Internal/Application level latency
Bottom line: you don't have to use only monitoring solutions, it is very easy to build relevant metrics using (good) logs
Application logs are a powerful weapon
But you will need data scientists/engineers
In our business: good data analysis can grow our revenues by two-digits percentages
Data
Timestamp
And a source.
We try here to build the destination
Logs is a constant stream of time-ordered information
Logs are directly and linearly linked to your application load, in terms of frequency and size
Your application scales and your logs don't?
They are useless
Just add capacity
(that's called vertical scaling)
Blob/Object storage?
Database?
Polling?
Push?
true nerds don't need interface, come on!
grep/awk/sed are enough, no?
Ideal: one interface to rule them all
Devs and Ops can search inside it and see the details
Business team can do some dashboarding and aggregates
Commercial SAAS solutions: Papertrail, Sumologic, Loggly...
OSS: Logstash + (Elasticsearch (+ Kibana))
Ultra flexible via plugins (and open source)
Built by devops who know how painful it is to read logs at 4AM
Gets/Receives data
Optionally transforms/filters/aggregate/rejects the data
Outputs data
Basically, an ETL for logs
Configured via a simple text file
Logstash's default database is Elasticsearch
Kibana is a web interface built to query Elastisearch and particularly Logstash data
It's gorgeous, well designed and works out of the box with Logstash
nope.
How do the logs go from apps to logstash?
Is one receiver a good idea?
Acts as a buffer between apps and receivers
My choice: Redis
Shippers push logs to the broker
They either get data from the application, or pull logs from appended files
(no pun intended)