日志收集

为了保证业务稳定运行,预测服务不健康风险,日志的收集可以帮助我们很好的观察当前服务的健康状况, 在传统业务开发中,机器部署还不是很多时,我们一般都是直接登录服务器进行日志查看、调试,但随着业务的增大,服务的不断拆分, 服务的维护成本也会随之变得越来越复杂,在分布式系统中,服务器机子增多,服务分布在不同的服务器上,当遇到问题时, 我们不能使用传统做法,登录到服务器进行日志排查和调试,这个复杂度可想而知。 log-flow

[!TIP] 如果是一个简单的单体服务系统或者服务过于小不建议直接使用,否则会适得其反。

准备工作

  • kafka
  • elasticsearch
  • kibana
  • filebeat、Log-Pilot(k8s)
  • go-stash

filebeat配置

  1. $ vim xx/filebeat.yaml
  1. filebeat.inputs:
  2. - type: log
  3. enabled: true
  4. # 开启json解析
  5. json.keys_under_root: true
  6. json.add_error_key: true
  7. # 日志文件路径
  8. paths:
  9. - /var/log/order/*.log
  10. setup.template.settings:
  11. index.number_of_shards: 1
  12. # 定义kafka topic field
  13. fields:
  14. log_topic: log-collection
  15. # 输出到kafka
  16. output.kafka:
  17. hosts: ["127.0.0.1:9092"]
  18. topic: '%{[fields.log_topic]}'
  19. partition.round_robin:
  20. reachable_only: false
  21. required_acks: 1
  22. keep_alive: 10s
  23. # ================================= Processors =================================
  24. processors:
  25. - decode_json_fields:
  26. fields: ['@timestamp','level','content','trace','span','duration']
  27. target: ""

[!TIP] xx为filebeat.yaml所在路径

go-stash配置

  • 新建config.yaml文件
  • 添加配置内容
  1. $ vim config.yaml
  1. Clusters:
  2. - Input:
  3. Kafka:
  4. Name: go-stash
  5. Log:
  6. Mode: file
  7. Brokers:
  8. - "127.0.0.1:9092"
  9. Topics:
  10. - log-collection
  11. Group: stash
  12. Conns: 3
  13. Consumers: 10
  14. Processors: 60
  15. MinBytes: 1048576
  16. MaxBytes: 10485760
  17. Offset: first
  18. Filters:
  19. - Action: drop
  20. Conditions:
  21. - Key: status
  22. Value: "503"
  23. Type: contains
  24. - Key: type
  25. Value: "app"
  26. Type: match
  27. Op: and
  28. - Action: remove_field
  29. Fields:
  30. - source
  31. - _score
  32. - "@metadata"
  33. - agent
  34. - ecs
  35. - input
  36. - log
  37. - fields
  38. Output:
  39. ElasticSearch:
  40. Hosts:
  41. - "http://127.0.0.1:9200"
  42. Index: "go-stash-{{yyyy.MM.dd}}"
  43. MaxChunkBytes: 5242880
  44. GracePeriod: 10s
  45. Compress: false
  46. TimeZone: UTC

启动服务(按顺序启动)

  • 启动kafka
  • 启动elasticsearch
  • 启动kibana
  • 启动go-stash
  • 启动filebeat
  • 启动order-api服务及其依赖服务(go-zero-demo工程中的order-api服务)

访问kibana

进入127.0.0.1:5601 log

[!TIP] 这里仅演示收集服务中通过logx产生的日志,nginx中日志收集同理。

参考文档