在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的日志。就像一个所有日志都聚集的酷俱乐部。
大结局:将一切整合在一起
现在我们已经准备好所有的部分,让我们看看这个美丽的日志交响乐是如何工作的:
- 你的应用程序将日志发送到Fluentd或Vector(或两者,我们不评判)
- Fluentd和Vector解析、转换并将日志转发到Loki
- Loki高效地存储日志并使其可供查询
- 你使用Grafana基于日志创建漂亮的仪表板和警报
就这样,你从日志的翻盖手机时代跃升到最先进的智能手机时代。你的日志现在是结构化的、可搜索的,并且真正有用。你还可以用“日志聚合”和“可观测性管道”这样的词语来打动同事。
结论:迈向未来的日志记录
从Syslog迁移到现代的集中式日志解决方案,使用Fluentd、Vector和Loki,可能看起来是一项艰巨的任务,但其好处是值得的。你将获得更好的性能、改进的可扩展性,并且在需要时能够真正找到日志堆中的针。
记住,千里之行始于一个配置文件。勇敢的日志记录者,愿你的日志永远对你有利!
“唯一比没有日志更糟糕的事情是拥有无法理解的日志。” - 每位DevOps工程师
现在,请原谅我,我有一些日志要解析。祝你日志记录愉快!