全链路监控之日志传输

        最近部门系统准备上全链路监控服务,既然监控,得先有日志。日志传输路径大概可分为:

        由图中所示分为两步:

一、从业务系统收集存储至 rsyslog 中

        收集过程就是按照指定格式记录日志,收集完毕后通过 openlog() 和 syslog() 函数写入 rsyslog 文件中:

$log_tag = 'test_link_monitor';
openlog($log_tag, SYSLOG_OPTION, SYSLOG_FACILITY);
syslog(LOG_INFO, json_encode($log, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
closelog();

        这里的 $log_tag 顾名思义是日志的标签,$log 是收集到的日志内容。当在程序中执行到这两个函数时,在前端机的 /var/log/messages 文件中就可以看到具体的日志内容了。类似以下这种:

Jan 18 09:34:54 localhost test_link_monitor: {"uid":"","req_id":"349ddd4bf71c21dc9a3b0b5edbcb1644","time":1610933694134,"script":"http://xxxx.xx.xx/xx/xx/xxx?page=1&page_size=3"...}

        过程中可能还会遇到如下错误:

openlog() has been disabled for security reasons;
syslog() has been disabled for security reasons

        这时只需要在 php 配置文件中找到这块区域:

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names.
; http://php.net/disable-functions
disable_functions = passthru,exec,system,chroot,chgrp,chown,popen,ini_alter,ini_restore,dl,readlink,openlog,syslog,symlink,popepassthru,stream_socket_server

        去除 openlog 和 syslog 就 ok 了。

二、从rsyslog传输到kafka。

        日志写入 /var/log/messages 后,就要通过 rsyslog 进程再将日志写入 kafka 了。先在 /etc/rsyslog.d 目录下定义相关配置文件,如 test_kafka.conf:

# 加载omkafka和imfile模块
module(load="omkafka")
module(load="imfile")

# ruleset
ruleset(name="test-kafka") {
    #日志转发kafka
    action (
        type="omkafka"
        partitions.number="1"
        topic="test_link"
        broker="localhost:9092"
    )
}

# 定义消息来源及设置相关的action
input(type="imfile" Tag="test_link_monitor" File="/var/log/messages" Ruleset="test-kafka")

        ruleset 可包含多条 rule, 一个 rule 就是 rsyslog 处理消息的一种方式,每个 rule 都包含 action。输入模块这里用的是 imfile 模块,作用是将所有的文本文件内容逐行转到 syslog 中。topic 名称定义的 test_link,在 kafka 中也会有对应的同名topic;最后一行的Tag也被赋值为 test_link_monitor,与之前日志中定义的 $log_tag 变量是对应的。定义好配置文件后,即可通过如下命令查看配置文件是否正常。

[root@lucas rsyslog.d]# /sbin/rsyslogd -N 1
rsyslogd: version 8.24.0-52.el7_8.2, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.

        可以看出配置文件没问题。这时不着急重启 rsyslog 进程,先启动 kafka 并创建对应的 topic。

[root@lucas kafka]# ./bin/kafka-server-start.sh -daemon config/server.properties
[root@lucas kafka]# ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test_link

        如之前所述,已创建了 topic,并命名为 test_link。可用如下命令查看 topic 列表,以及对应的 topic 信息。

[root@lucas kafka]# ./bin/kafka-topics.sh --list --zookeeper localhost:2181
test_link
test_lucas
[root@lucas kafka]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test_link
Topic: test_link	PartitionCount: 1	ReplicationFactor: 1	Configs: 
	Topic: test_link	Partition: 0	Leader: 0	Replicas: 0	Isr: 0

        接下来查看该 topic 的消费信息:

[root@lucas kafka]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_link --from-beginning

        此时由于还没有任何程序往里写数据,应该也没有任何反应。这时在另一个终端窗口再重启 rsyslog 进程:

[root@lucas kafka]# service rsyslog restart
Redirecting to /bin/systemctl restart rsyslog.service

        可以看到 topic 中有数据了:

[root@lucas kafka]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_lucas --from-beginning
2021-01-18T18:54:21.114422+08:00 lucas test_link_monitor ...

2021-01-18T18:54:21.114441+08:00 lucas test_link_monitor ...

2021-01-18T18:54:21.114455+08:00 lucas test_link_monitor ...
...

        至此,业务日志已成功写入kafka中。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值