Skip to content

如何查看实时日志

袁逸凡 edited this page Aug 13, 2018 · 3 revisions

日志显示工具

本工具需要Python3才能支持。

本质上是对WebSocket(或者kafka)JSON数据进行合理的过滤和格式化,可以通过编写Python脚本的方式完成你的格式化。

环境准备

如果你需要在自己的PC机上浏览日志(不推荐)的话,需要安装各种包包。

首先你需要安装一下Python3,python-websocket:

如果你要使用lofka_console_kafka从kafka而非WebSocket实时显示日志,那么:

pip3 install kafka-python python-snappy

Lofka默认使用GZip压缩,如果你需要使用Snappy,才需要安装包python-snappy

需要注意的是,对于Linux系统,安装python-snappy之前需要安装snappy开发库:

# 针对Debian系列系统
apt install libsnappy-dev
# 你要是加入了CentOS邪教的话
yum install snappy-devel
# 你要是用苹果
# 那么我也不知道
# 欢迎补充

如果是Windows,需要安装Visual C++ 14编译器,否则pip无法编译snappy。

参考资料:

源码修改

找到lofka_console.py中如下两行,将中文部分改为你需要的配置:

ws_host = arg_map.query_default("ws_host", "输入WebSocket的地址(IP/域名)")
ws_port = arg_map.query_default("ws_port", "输入WebSocket的端口")

例如:

ws_host = arg_map.query_default("ws_host", "10.10.11.75")
ws_port = arg_map.query_default("ws_port", "9500")

如果不修改,每次使用都需要在命令行中指定,如:--ws_host 127.0.0.1 --ws_port 9500

同时找到: 找到lofka_console_kafka.py中如下两行:

kafka_servers = arg_map.query_default("bootstrap_servers", "Kafka服务器地址")
zookeeper_servers = arg_map.query_default("zookeeper_servers", "Zookeeper地址")

例如:

kafka_servers = arg_map.query_default("bootstrap_servers", "data1:9092,data2:9092,data3:9092")
zookeeper_servers = arg_map.query_default("zookeeper_servers", "admin:2181,name1:2181,name2:2181")

如果不修改,每次使用都需要在命令行中指定bootstrap_serverszookeeper_servers的内容,多个地址使用逗号隔开。

实时监控日志

随后运行lofka_console.py,其中参数的格式为:--key1.key2...keyM value1,value2,...,valueN 举个例子,我只要监控app_name为app1或app2的WARN级别以上的日志,并且只监控固定IP送来的信息,只需要这样给出参数即可:

python3 lofka_console.py --app_name app1,app2 --level WARN,ERROR,FATAL --host.ip 10.10.11.75,10.10.11.36

详细的过滤取决于你对JSON的格式的定义,一般的定义参见Wiki中的Logger-JSON格式规范

自认为显示效果已经算是不错了,如果你有更加变态的需求请修改这个脚本,如果不会修改请联系我。

举个例子: 一般日志显示:

NGINX日志显示:

  • 根据某个域名过滤(例如只查看test.example.com,多个域名使用逗号隔开):lofka-console --message.host test.example.com
  • 只查看POST和PUT类型的请求:lofka-console --message.request_method POST,PUT
  • 更多过滤条件以此类推。

输出LoggerJSON原始数据

参数中加上--print_raw即可打印原始JSON格式的数据。