Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Aggregierte
Logging Patterns
Philipp Krenn @xeraa
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
Developer
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
@xeraa
Disclaimer
I build highly monitored Hello World
apps
@xeraa
Example: Java
SLF4J, Logback, MDC
with logstash-logback-encoder
Alternative https://github.com/vy/log4j2-logstash-layout
@...
And Everywhere Else
.NET: NLog
JavaScript: Winston
Python: structlog
PHP: Monolog
@xeraa
Anti-Pattern: print
System.out.println("Oops");
@xeraa
Anti-Pattern: Coupling
@xeraa
Parse
@xeraa
@xeraa
Bind Mount Logs
java_app:
volumes:
- './logs-docker/:/logs/'
...
filebeat_for_logstash:
volumes:
- './logs-docker/:/mnt/lo...
Collect Log Lines
filebeat.inputs:
- type: log
paths:
- /mnt/logs/*.log
@xeraa
Metadata
processors:
- add_host_metadata: ~
@xeraa
Test Multiline Pattern
https://www.elastic.co/guide/en/beats/filebeat/current/
_test_your_regexp_pattern_for_multiline.html...
Grok
https://github.com/logstash-plugins/logstash-patterns-core/blob/
master/patterns/grok-patterns
@xeraa
Dev Tools
Grok Debugger
@xeraa
[2018-09-28 10:30:38.516] ERROR net.xeraa.logging.LogMe [main] -
user_experience= , session=46, loop=15 -
Wake me up at ni...
Elastic Common
Schema
https://github.com/elastic/ecs
@xeraa
Machine Learning
Data Visualizer
@xeraa
Logstash Key Value Filter for MDC
kv {
source => "labels"
field_split => ","
trim_key => " "
}
@xeraa
Monitoring:
Logstash Pipeline
Plus other components
@xeraa
Pro: No change
Con: Regular expression, multiline,
format changes
@xeraa
Send
@xeraa
@xeraa
logback.xml
<appender name="logstash" class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
<destination>...
Pro: No files
Con: Outages & coupling
@xeraa
Structure
@xeraa
@xeraa
Collect JSON
filebeat.input:
- type: log
paths:
- /mnt/logs/*.json
json:
message_key: message
keys_under_root: true
@xeraa
Stack(trace) Hash
@xeraa
Bonues: Multi-Index
output.elasticsearch:
hosts: ["http://localhost:9200"]
indices:
- index: "warning-%{[agent.version]}-%...
Pro: Right format
Con: JSON serialization overhead
@xeraa
Containerize
@xeraa
@xeraa
Where to put Filebeat?
Sidecar
@xeraa
@xeraa
https://github.com/elastic/beats/tree/
master/deploy/docker
@xeraa
Docker Logs
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
processors:
- add_docker_metadata: ~
@xer...
Metadata
No Docker metadata with the other methods
@xeraa
"docker": {
"container": {
"labels": {
"app": "fizzbuzz",
"co_elastic_logs/multiline_match": "after",
"com_docker_compose_...
Missing the Last Line
Waiting for the newline
@xeraa
Hints
labels:
- "app=fizzbuzz"
- "co.elastic.logs/multiline.pattern=^["
- "co.elastic.logs/multiline.negate=true"
- "co.el...
Registry File
filebeat.registry.path: /usr/share/filebeat/data/registry
@xeraa
Ingest Pipeline
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
index: "docker"
pipelines:
- pipeline: "parse_j...
Ingest Pipeline
{
"description" : "Parse Java log lines",
"processors": [
{
"grok": {
"field": "message",
"patterns": [ "^...
Unknown Fields
@xeraa
ASCII Art
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.9 (00000000/0) 64 bit
.-`` .-```. ```/ _.,_ ''-._
( ' , .-` | `, ...
Configuration Templates
filebeat.autodiscover:
providers:
- type: docker
templates:
- condition:
equals:
docker.container.i...
Who Logs the Logger
Avoid loops
Process without -e
filebeat.yml: logging.to_files: true
@xeraa
Pro: Hot
Con: Complexity
@xeraa
Orchestrate
@xeraa
@xeraa
Where to put Filebeat?
DaemonSet
@xeraa
https://github.com/elastic/beats/tree/
master/deploy/kubernetes
@xeraa
Metadata
Either in cluster or outside
processors:
- add_kubernetes_metadata:
in_cluster: true
- add_kubernetes_metadata:
i...
{
"host": "172.17.0.21",
"port": 9090,
"kubernetes": {
"container": {
"id": "382184ecdb385cfd5d1f1a65f78911054c8511ae00963...
More Metadata
Add: Cloud, local timezone, process
Drop: Events, fields
Rename: Fields
Dissect, DNS reverse lookup
@xeraa
Configuration Templates
filebeat.autodiscover:
providers:
- type: kubernetes
templates:
- condition:
equals:
kubernetes.nam...
Customize Indices
output.elasticsearch:
index: "%{[kubernetes.namespace]:filebeat}-%{[beat.version]}-%{+yyyy.MM.dd}"
@xeraa
Pro: Hot
Con: Complexity++
@xeraa
Moar
@xeraa
Index Patterns
Time based (default: daily)
Versioned
@xeraa
Sizing
Daily volume * Retention * Replication
Number of shards
@xeraa
Index Lifecycle Management
! "
@xeraa
Order
https://github.com/elastic/elasticsearch/blob/7.1/x-pack/plugin/core/src/main/java/org/elasticsearch/
xpack/core/ind...
Frozen Indices
https://www.elastic.co/guide/en/elasticsearch/reference/6.6/
frozen-indices.html
@xeraa
Ratio Heap : Storage
Index > Frozen Index > Closed Index
Read-only
@xeraa
Throttled Thread Pool
1 parallel search / node
100 in queue
@xeraa
Conclusion
@xeraa
Examples
https://github.com/xeraa/java-logging
@xeraa
Parse
Send
Structure
Containerize
Orchestrate
@xeraa
Questions?
Philipp Krenn @xeraa
@xeraa
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Upcoming SlideShare
Loading in …5
×

of

Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 1 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 2 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 3 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 4 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 5 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 6 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 7 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 8 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 9 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 10 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 11 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 12 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 13 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 14 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 15 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 16 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 17 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 18 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 19 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 20 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 21 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 22 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 23 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 24 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 25 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 26 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 27 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 28 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 29 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 30 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 31 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 32 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 33 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 34 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 35 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 36 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 37 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 38 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 39 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 40 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 41 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 42 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 43 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 44 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 45 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 46 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 47 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 48 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 49 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 50 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 51 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 52 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 53 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 54 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 55 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 56 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 57 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 58 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 59 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 60 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 61 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 62 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 63 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 64 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 65 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 66 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 67 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 68 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 69 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 70 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 71 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 72 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 73 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 74 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 75 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 76 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 77 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 78 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 79 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 80 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 81 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 82 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 83 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 84 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 85 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 86 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 87 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 88 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 89 Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns Slide 90
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

0 Likes

Share

Download to read offline

Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns

Download to read offline

In verteilten Applikationen besteht immer der Bedarf Logs zu zentralisieren - sobald man mehr als ein paar Server oder Container hat, reichen SSH und cat, tail oder less nicht mehr aus. Das übliche Problem ist aber, wie man möglichst effizient zu einer zentralisierten oder aggregierten Log-Lösung kommt.

Dieser Vortrag stellt mehrere Ansätze und Patterns mit ihren Vor- und Nachteilen vor, so dass die Zuhörer den auswählen können, der am besten zu Ihrer Organisation passt:

* Parsen: Bestehende Logdaten können weiterverwendet werden und die relevanten Informationen werden per Regular Expression extrahiert.
* Senden: Mit einem geeigneten Log-Appender werden die Ereignisse direkt gesendet, ohne dass sie in einer Logdatei gespeichert werden müssen.
* Strukturieren: Ereignisse in einem strukturierten Format abspeichern, das dann direkt zentralisiert werden kann.
* Containerisieren: Das Logging mit Containern erfordert zusätzliche Automatismen, um effizient mit Logs arbeiten zu können.
* Orchestrieren: Auch wenn Dienste nur kurzfristig laufen und dynamisch verteilt werden, gibt mit Kubernetes Möglichkeiten den Überblick zu bewahren.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns

  1. 1. Aggregierte Logging Patterns Philipp Krenn @xeraa @xeraa
  2. 2. @xeraa
  3. 3. @xeraa
  4. 4. @xeraa
  5. 5. @xeraa
  6. 6. @xeraa
  7. 7. @xeraa
  8. 8. @xeraa
  9. 9. @xeraa
  10. 10. Developer @xeraa
  11. 11. @xeraa
  12. 12. @xeraa
  13. 13. @xeraa
  14. 14. @xeraa
  15. 15. @xeraa
  16. 16. Disclaimer I build highly monitored Hello World apps @xeraa
  17. 17. Example: Java SLF4J, Logback, MDC with logstash-logback-encoder Alternative https://github.com/vy/log4j2-logstash-layout @xeraa
  18. 18. And Everywhere Else .NET: NLog JavaScript: Winston Python: structlog PHP: Monolog @xeraa
  19. 19. Anti-Pattern: print System.out.println("Oops"); @xeraa
  20. 20. Anti-Pattern: Coupling @xeraa
  21. 21. Parse @xeraa
  22. 22. @xeraa
  23. 23. Bind Mount Logs java_app: volumes: - './logs-docker/:/logs/' ... filebeat_for_logstash: volumes: - './logs-docker/:/mnt/logs/:ro' ... @xeraa
  24. 24. Collect Log Lines filebeat.inputs: - type: log paths: - /mnt/logs/*.log @xeraa
  25. 25. Metadata processors: - add_host_metadata: ~ @xeraa
  26. 26. Test Multiline Pattern https://www.elastic.co/guide/en/beats/filebeat/current/ _test_your_regexp_pattern_for_multiline.html @xeraa
  27. 27. Grok https://github.com/logstash-plugins/logstash-patterns-core/blob/ master/patterns/grok-patterns @xeraa
  28. 28. Dev Tools Grok Debugger @xeraa
  29. 29. [2018-09-28 10:30:38.516] ERROR net.xeraa.logging.LogMe [main] - user_experience= , session=46, loop=15 - Wake me up at night java.lang.RuntimeException: Bad runtime... at net.xeraa.logging.LogMe.main(LogMe.java:30) ^[%{TIMESTAMP_ISO8601:@timestamp}]%{SPACE}%{LOGLEVEL:log.level} %{SPACE}%{USERNAME:log.package}%{SPACE}[%{WORD:log.method}] %{SPACE}-%{SPACE}%{GREEDYDATA:log.labels}%{SPACE}-%{SPACE} %{GREEDYDATA:message}(?:n+(?<stacktrace>(?:.|r|n)+))? @xeraa
  30. 30. Elastic Common Schema https://github.com/elastic/ecs @xeraa
  31. 31. Machine Learning Data Visualizer @xeraa
  32. 32. Logstash Key Value Filter for MDC kv { source => "labels" field_split => "," trim_key => " " } @xeraa
  33. 33. Monitoring: Logstash Pipeline Plus other components @xeraa
  34. 34. Pro: No change Con: Regular expression, multiline, format changes @xeraa
  35. 35. Send @xeraa
  36. 36. @xeraa
  37. 37. logback.xml <appender name="logstash" class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender"> <destination>logstash:4560</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> @xeraa
  38. 38. Pro: No files Con: Outages & coupling @xeraa
  39. 39. Structure @xeraa
  40. 40. @xeraa
  41. 41. Collect JSON filebeat.input: - type: log paths: - /mnt/logs/*.json json: message_key: message keys_under_root: true @xeraa
  42. 42. Stack(trace) Hash @xeraa
  43. 43. Bonues: Multi-Index output.elasticsearch: hosts: ["http://localhost:9200"] indices: - index: "warning-%{[agent.version]}-%{+yyyy.MM.dd}" when.contains: message: "WARN" - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}" when.contains: message: "ERR" @xeraa
  44. 44. Pro: Right format Con: JSON serialization overhead @xeraa
  45. 45. Containerize @xeraa
  46. 46. @xeraa
  47. 47. Where to put Filebeat? Sidecar @xeraa
  48. 48. @xeraa
  49. 49. https://github.com/elastic/beats/tree/ master/deploy/docker @xeraa
  50. 50. Docker Logs filebeat.autodiscover: providers: - type: docker hints.enabled: true processors: - add_docker_metadata: ~ @xeraa
  51. 51. Metadata No Docker metadata with the other methods @xeraa
  52. 52. "docker": { "container": { "labels": { "app": "fizzbuzz", "co_elastic_logs/multiline_match": "after", "com_docker_compose_config-hash": "41520c6cf2b6a1f3dae4f16d0a6fd76760cdfc38fbfe43a3a3be2e09bdd1b8b5", "environment": "production", "co_elastic_logs/multiline_pattern": "^[", "co_elastic_logs/multiline_negate": "true", "com_docker_compose_oneoff": "False", "com_docker_compose_project": "java-logging", "com_docker_compose_service": "java_app", "com_docker_compose_container-number": "1", "com_docker_compose_version": "1.23.2" } } } @xeraa
  53. 53. Missing the Last Line Waiting for the newline @xeraa
  54. 54. Hints labels: - "app=fizzbuzz" - "co.elastic.logs/multiline.pattern=^[" - "co.elastic.logs/multiline.negate=true" - "co.elastic.logs/multiline.match=after" @xeraa
  55. 55. Registry File filebeat.registry.path: /usr/share/filebeat/data/registry @xeraa
  56. 56. Ingest Pipeline output.elasticsearch: hosts: ["http://elasticsearch:9200"] index: "docker" pipelines: - pipeline: "parse_java" when.contains: container.name: "java_app" @xeraa
  57. 57. Ingest Pipeline { "description" : "Parse Java log lines", "processors": [ { "grok": { "field": "message", "patterns": [ "^[%{TIMESTAMP_ISO8601:timestamp}]%{SPACE}%{LOGLEVEL:log.level} %{SPACE}%{USERNAME:log.package}%{SPACE}[%{WORD:log.method}]%{SPACE}- %{SPACE}%{GREEDYDATA:labels}%{SPACE}-%{SPACE}%{GREEDYDATA:message_parsed} (?:n+(?<stacktrace>(?:.|r|n)+))?" ], "ignore_failure": true } } ] } @xeraa
  58. 58. Unknown Fields @xeraa
  59. 59. ASCII Art _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.9 (00000000/0) 64 bit .-`` .-```. ```/ _.,_ ''-._ ( ' , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 55757 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' @xeraa
  60. 60. Configuration Templates filebeat.autodiscover: providers: - type: docker templates: - condition: equals: docker.container.image: redis config: - type: docker containers.ids: - "${data.docker.container.id}" exclude_lines: ["^s+[-`('.|_]"] @xeraa
  61. 61. Who Logs the Logger Avoid loops Process without -e filebeat.yml: logging.to_files: true @xeraa
  62. 62. Pro: Hot Con: Complexity @xeraa
  63. 63. Orchestrate @xeraa
  64. 64. @xeraa
  65. 65. Where to put Filebeat? DaemonSet @xeraa
  66. 66. https://github.com/elastic/beats/tree/ master/deploy/kubernetes @xeraa
  67. 67. Metadata Either in cluster or outside processors: - add_kubernetes_metadata: in_cluster: true - add_kubernetes_metadata: in_cluster: false host: <hostname> kube_config: ${HOME}/.kube/config @xeraa
  68. 68. { "host": "172.17.0.21", "port": 9090, "kubernetes": { "container": { "id": "382184ecdb385cfd5d1f1a65f78911054c8511ae009635300ac28b4fc357ce51", "image": "my-java:1.0.0", "name": "my-java" }, "labels": { "app": "java", }, "namespace": "default", "node": { "name": "minikube" }, "pod": { "name": "java-2657348378-k1pnh" } }, } @xeraa
  69. 69. More Metadata Add: Cloud, local timezone, process Drop: Events, fields Rename: Fields Dissect, DNS reverse lookup @xeraa
  70. 70. Configuration Templates filebeat.autodiscover: providers: - type: kubernetes templates: - condition: equals: kubernetes.namespace: redis config: - type: docker containers.ids: - "${data.kubernetes.container.id}" exclude_lines: ["^s+[-`('.|_]"] @xeraa
  71. 71. Customize Indices output.elasticsearch: index: "%{[kubernetes.namespace]:filebeat}-%{[beat.version]}-%{+yyyy.MM.dd}" @xeraa
  72. 72. Pro: Hot Con: Complexity++ @xeraa
  73. 73. Moar @xeraa
  74. 74. Index Patterns Time based (default: daily) Versioned @xeraa
  75. 75. Sizing Daily volume * Retention * Replication Number of shards @xeraa
  76. 76. Index Lifecycle Management ! " @xeraa
  77. 77. Order https://github.com/elastic/elasticsearch/blob/7.1/x-pack/plugin/core/src/main/java/org/elasticsearch/ xpack/core/indexlifecycle/TimeseriesLifecycleType.java static final List<String> ORDERED_VALID_HOT_ACTIONS = Arrays.asList( SetPriorityAction.NAME, UnfollowAction.NAME, RolloverAction.NAME ); static final List<String> ORDERED_VALID_WARM_ACTIONS = Arrays.asList( SetPriorityAction.NAME, UnfollowAction.NAME, ReadOnlyAction.NAME, AllocateAction.NAME, ShrinkAction.NAME, ForceMergeAction.NAME ); static final List<String> ORDERED_VALID_COLD_ACTIONS = Arrays.asList( SetPriorityAction.NAME, UnfollowAction.NAME, AllocateAction.NAME, FreezeAction.NAME ); static final List<String> ORDERED_VALID_DELETE_ACTIONS = Arrays.asList( DeleteAction.NAME ); @xeraa
  78. 78. Frozen Indices https://www.elastic.co/guide/en/elasticsearch/reference/6.6/ frozen-indices.html @xeraa
  79. 79. Ratio Heap : Storage Index > Frozen Index > Closed Index Read-only @xeraa
  80. 80. Throttled Thread Pool 1 parallel search / node 100 in queue @xeraa
  81. 81. Conclusion @xeraa
  82. 82. Examples https://github.com/xeraa/java-logging @xeraa
  83. 83. Parse Send Structure Containerize Orchestrate @xeraa
  84. 84. Questions? Philipp Krenn @xeraa @xeraa

In verteilten Applikationen besteht immer der Bedarf Logs zu zentralisieren - sobald man mehr als ein paar Server oder Container hat, reichen SSH und cat, tail oder less nicht mehr aus. Das übliche Problem ist aber, wie man möglichst effizient zu einer zentralisierten oder aggregierten Log-Lösung kommt. Dieser Vortrag stellt mehrere Ansätze und Patterns mit ihren Vor- und Nachteilen vor, so dass die Zuhörer den auswählen können, der am besten zu Ihrer Organisation passt: * Parsen: Bestehende Logdaten können weiterverwendet werden und die relevanten Informationen werden per Regular Expression extrahiert. * Senden: Mit einem geeigneten Log-Appender werden die Ereignisse direkt gesendet, ohne dass sie in einer Logdatei gespeichert werden müssen. * Strukturieren: Ereignisse in einem strukturierten Format abspeichern, das dann direkt zentralisiert werden kann. * Containerisieren: Das Logging mit Containern erfordert zusätzliche Automatismen, um effizient mit Logs arbeiten zu können. * Orchestrieren: Auch wenn Dienste nur kurzfristig laufen und dynamisch verteilt werden, gibt mit Kubernetes Möglichkeiten den Überblick zu bewahren.

Views

Total views

314

On Slideshare

0

From embeds

0

Number of embeds

87

Actions

Downloads

4

Shares

0

Comments

0

Likes

0

×