Distributed Logging Architecture in Container Era LinuxCon Japan - - PowerPoint PPT Presentation

distributed logging architecture in container era
SMART_READER_LITE
LIVE PREVIEW

Distributed Logging Architecture in Container Era LinuxCon Japan - - PowerPoint PPT Presentation

Distributed Logging Architecture in Container Era LinuxCon Japan 2016 at Jun 13 2016 Satoshi "Moris" Tagomori (@tagomoris) Satoshi "Moris" Tagomori (@tagomoris) Fluentd, MessagePack-Ruby, Norikra, ... Treasure Data, Inc.


slide-1
SLIDE 1

Distributed Logging Architecture in Container Era

LinuxCon Japan 2016 at Jun 13 2016 Satoshi "Moris" Tagomori (@tagomoris)

slide-2
SLIDE 2

Satoshi "Moris" Tagomori (@tagomoris) Fluentd, MessagePack-Ruby, Norikra, ... Treasure Data, Inc.

slide-3
SLIDE 3

Topics

  • Microservices and logging in various industries
  • Difficulties of logging with containers
  • Distributed logging architecture
  • Patterns of distributed logging architecture
  • Case Study: Docket and Fluentd
  • Why OSS are important for logging
slide-4
SLIDE 4

Logging

slide-5
SLIDE 5

Logging in Various Industries

  • Web access logs
  • Views/visitors on media
  • Views/clicks on Ads
  • Commercial transactions (EC, Game, ...)
  • Data from devices
  • Operation logs on Apps of phones
  • Various sensor data
slide-6
SLIDE 6

Microservices and Logging

  • Monolithic service
  • a service produces all data

about an users access

  • Microservices
  • many services produce data

about an users access

  • it's needed to collect logs

from many services to know what is happening

Users Service (Application) Logs Users Logs

slide-7
SLIDE 7

Logging and Containers

slide-8
SLIDE 8

Containers: "a must" for microservices

  • Dividing a service into services
  • a service requires less computing resources


(VM -> containers)

  • Making services independent from each other
  • but it is very difficult :(
  • some dependency must be solved even in

development environment
 (containers on desktop)

slide-9
SLIDE 9

Redesign Logging: Why?

  • No permanent storages
  • No fixed physical/network address
  • No fixed mapping between servers and roles
slide-10
SLIDE 10

Containers: immutable & disposable

  • No permanent storages
  • Where to write logs?
  • file in container


→ be gone w/ container instance 😟

  • dir shared from host


→ hosts are shared by many services ☹

  • TODO: ship logs from container to anywhere ASAP
slide-11
SLIDE 11

Containers: unfixed addresses

  • No fixed physical / network address
  • Where should we go to fetch logs?
  • Service discovery (e.g., consul)


→ one more component 😟

  • rsync? ssh+tail? or ..? Is it installed in container?


→ one more tool to depend on ☹

  • TODO: push logs to anywhere from containers
slide-12
SLIDE 12

Containers: instances per roles

  • No fixed mapping between servers and roles
  • How can we parse / store these logs?
  • Central repository about log syntax


→ very hard to maintain 😟

  • Label logs by source address


→ many containers/roles in a host ☹

  • TODO: label & parse logs at source of logs
slide-13
SLIDE 13

Distributed Logging Architecture

slide-14
SLIDE 14

Core Architecture

  • Collector nodes
  • Aggregator nodes
  • Destination

Collector nodes (Docker containers + agent) Destination
 (Storage, Database, ...) Aggregator nodes

slide-15
SLIDE 15
  • Parse (collector)
  • Raw logs are not good for processing
  • Convert logs to structured data (key-value pairs)
  • Sort/Shuffle (aggregator)
  • Mixed logs are not good for scanning
  • Split whole data stream into streams
  • Store (destination)
  • Format logs(records) as destination expects

Collecting and Storing Data

slide-16
SLIDE 16

Scaling Logging

  • Network traffic
  • CPU load to parse / format
  • Parse logs on each collector (distributed)
  • Format logs on aggregator (to be distributed)
  • Capability
  • Make aggregators redundant
  • Controlling delay
slide-17
SLIDE 17

Patterns

slide-18
SLIDE 18

source aggregation NO source aggregation YES destination aggregation NO destination aggregation YES

Aggregation Patterns

slide-19
SLIDE 19

Source Side Aggregation Patterns

w/o source aggregation

w/ source aggregation

collector aggregator aggregate container

slide-20
SLIDE 20

Without Source Aggregation

  • Pros:
  • Simple configuration
  • Cons:
  • fixed aggregator (endpoint) address
  • many network connections
  • high load in aggregator

collector aggregator

slide-21
SLIDE 21

With Source Aggregation

  • Pros:
  • less connections
  • lower load in aggregator
  • less configuration in containers


(by specifying localhost)

  • highly flexible configuration


(by deployment only for aggregate containers)

  • Cons:
  • a bit much resource (+1 container per host)

aggregate container

slide-22
SLIDE 22

Destination Side Aggregation Patterns

w/o destination aggregation

w/ destination aggregation

aggregator collector destination

slide-23
SLIDE 23

Without Destination Aggregation

  • Pros:
  • Less nodes
  • Simpler configuration
  • Cons:
  • Storage side change affects collector side
  • Worse performance: many small write requests
  • n storage
slide-24
SLIDE 24

With Destination Aggregation

  • Pros:
  • Collector side configuration is


free from storage side changes

  • Better performance with fine tune

  • n destination side aggregator
  • Cons:
  • More nodes
  • A bit complex configuration

aggregator

slide-25
SLIDE 25

Scaling Patterns

Scaling Up Endpoints HTTP/TCP load balancer Huge queue + workers Scaling Out Endpoints Round-robin clients

Load balancer Backend nodes Collector nodes Aggregator nodes

slide-26
SLIDE 26

Scaling Up Endpoints

  • Pros:
  • Simple configuration


in collector nodes

  • Cons:
  • Scaling up limit

Load balancer Backend nodes

slide-27
SLIDE 27

Scaling Out Endpoints

  • Pros:
  • Unlimited scaling


by adding aggregator nodes

  • Cons:
  • Complex configuration
  • Client features for round-robin
slide-28
SLIDE 28

Without
 Destination Aggregation With
 Destination Aggregation Scaling Up Endpoints Systems in early stages Collecting logs over Internet

  • r

Using queues Scaling Out Endpoints Impossible :( Collector nodes must know all endpoints ↓ Uncontrollable Collecting logs in datacenter

slide-29
SLIDE 29

Case Studies

slide-30
SLIDE 30

Case Study: Docker+Fluentd

  • Destination aggregation + scaling up
  • Fluent logger + Fluentd
  • Source aggregation + scaling up
  • Docker json logger + Fluentd + Elasticsearch
  • Docker fluentd logger + Fluentd + Kafka
  • Source/Destination aggregation + scaling out
  • Docker fluentd logger + Fluentd
slide-31
SLIDE 31

Why Fluentd?

  • Docker Fluentd logging driver
  • Docker container can send logs into Fluentd

directly - less overhead

  • Pluggable architecture
  • Various destination systems
  • Small memory footprint
  • Source aggregation requires +1 container per host
  • Less additional resource usage ( < 100MB )
slide-32
SLIDE 32

Destination aggregation + scaling up

  • Sending logs directly over TCP by Fluentd logger


in application code

  • Same with patterns of New Relic

Application code

slide-33
SLIDE 33

Source aggregation + scaling up

  • Kubernetes: Json logger + Fluentd + Elasticsearch
  • Applications write logs to STDOUT
  • Docker writes logs as JSON in files
  • Fluentd


reads logs from file
 parse JSON objects
 writes logs to Elasticsearch

http://kubernetes.io/docs/getting-started-guides/logging-elasticsearch/ Elasticsearch Application code

Files (JSON)

slide-34
SLIDE 34

Source aggregation + scaling up

  • Docker fluentd logging driver + Fluentd + Kafka
  • Applications write logs to STDOUT
  • Docker sends logs


to localhost Fluentd

  • Fluentd


gets logs over TCP
 pushes logs into Kafka

Kafka Application code

slide-35
SLIDE 35

Source/Destination aggregation + scaling out

  • Docker fluentd logging driver + Fluentd
  • Applications write logs to STDOUT
  • Docker sends logs


to localhost Fluentd

  • Fluentd


gets logs over TCP
 sends logs into Aggregator Fluentd
 w/ round-robin load balance

Application code

slide-36
SLIDE 36

What's the Best?

  • Writing logs from containers: Some way to do it
  • Docker logging driver
  • Write logs on files + read/parse it
  • Send logs from apps directly
  • Keep it scalable!
  • Source aggregation: Fluentd on localhost
  • Scalable storage: (Kafka, external services, ...)
  • No destination aggregation + Scaling up
  • Non-scalable storage: (Filesystems, RDBMSs, ...)
  • Destination aggregation + Scaling out
slide-37
SLIDE 37

Why OSS Are Important For Logging?

slide-38
SLIDE 38

Why OSS?

  • Logging layer is interface
  • transparency
  • interoperability
  • Keep it scalable
  • number of nodes
  • number of types of source/destination
slide-39
SLIDE 39

Use OSS, Make Logging Scalable