在21世纪,我们的目标是建立一个可扩展、安全且合理的日志设置。为此,我们依靠以下三大工具:

  • Fluentd:日志收集的多功能工具(不想惹恼陈词滥调警察,所以不叫瑞士军刀)
  • Vector:新晋选手,正在挑战Fluentd的地位
  • Loki:Grafana的回答是:“如果日志和指标一样酷呢?”

步骤1:告别Syslog(别哭,这是为了更好)

首先,我们需要果断地放弃Syslog。以下是确保你准备好大迁移的快速清单:

  • 清点所有Syslog来源
  • 识别任何自定义解析或路由规则
  • 备份当前的Syslog配置(以防万一)
  • 通知你的团队(或许还可以订些披萨——变革总是伴随着美食更好)

步骤2:设置Fluentd - 万能日志工具

Fluentd是我们日志之旅的第一站。它的优点如下:

  • 支持多种输入和输出插件
  • 能很好地处理结构化和非结构化数据
  • 轻量级,用C语言编写(插件用Ruby)

让我们启动并运行Fluentd:


# 安装Fluentd(假设你使用的是基于Debian的系统)
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-focal-td-agent4.sh | sh

# 启动Fluentd服务
sudo systemctl start td-agent

现在,让我们配置Fluentd以接受来自旧Syslog客户端的日志:



  @type syslog
  port 5140
  tag system



  @type forward
  send_timeout 60s
  recover_wait 10s
  hard_timeout 60s

  
    name loki_server
    host 10.0.0.1
    port 24224
  

这个配置告诉Fluentd监听5140端口的Syslog消息,并将其转发到我们的Loki服务器。简单吧?

步骤3:Vector - 新晋执法者

虽然Fluentd很棒,但Vector是那个引人注目的新秀。它速度极快,使用更少的CPU和内存,配置简单得不会让你抓狂。让我们将Vector加入我们的组合:


# 安装Vector
curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | sh

# 启动Vector
sudo systemctl start vector

现在,让我们配置Vector与Fluentd协同工作:


[sources.syslog]
type = "syslog"
address = "0.0.0.0:514"
mode = "tcp"

[transforms.parse_syslog]
type = "remap"
inputs = ["syslog"]
source = '''
. = parse_syslog!(.message)
'''

[sinks.loki]
type = "loki"
inputs = ["parse_syslog"]
endpoint = "http://10.0.0.1:3100"
encoding.codec = "json"
labels = {job = "vector_logs"}

这个配置告诉Vector接受Syslog输入,解析它,然后将其发送到Loki。就像Fluentd,但带有“我刚喝了五杯浓缩咖啡”的活力。

步骤4:Loki - 日志成为明星的地方

Loki是我们日志拼图的最后一块。它就像Prometheus,但用于日志,并且与Grafana配合得非常好。让我们设置它:


auth_enabled: false

server:
  http_listen_port: 3100

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s

schema_config:
  configs:
  - from: 2020-05-15
    store: boltdb
    object_store: filesystem
    schema: v11
    index:
      prefix: index_
      period: 168h

storage_config:
  boltdb:
    directory: /tmp/loki/index

  filesystem:
    directory: /tmp/loki/chunks

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h

这个配置设置Loki接受来自Fluentd和Vector的日志。就像一个所有日志都聚集的酷俱乐部。

大结局:将一切整合在一起

现在我们已经准备好所有的部分,让我们看看这个美丽的日志交响乐是如何工作的:

  1. 你的应用程序将日志发送到Fluentd或Vector(或两者,我们不评判)
  2. Fluentd和Vector解析、转换并将日志转发到Loki
  3. Loki高效地存储日志并使其可供查询
  4. 你使用Grafana基于日志创建漂亮的仪表板和警报

就这样,你从日志的翻盖手机时代跃升到最先进的智能手机时代。你的日志现在是结构化的、可搜索的,并且真正有用。你还可以用“日志聚合”和“可观测性管道”这样的词语来打动同事。

结论:迈向未来的日志记录

从Syslog迁移到现代的集中式日志解决方案,使用Fluentd、Vector和Loki,可能看起来是一项艰巨的任务,但其好处是值得的。你将获得更好的性能、改进的可扩展性,并且在需要时能够真正找到日志堆中的针。

记住,千里之行始于一个配置文件。勇敢的日志记录者,愿你的日志永远对你有利!

“唯一比没有日志更糟糕的事情是拥有无法理解的日志。” - 每位DevOps工程师

现在,请原谅我,我有一些日志要解析。祝你日志记录愉快!