2

同步服务器日志到 SeaTable,让日志更好的可视化和协同处理

 2 years ago
source link: https://segmentfault.com/a/1190000040847743
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

SeaTable 开发者版是一款免费易用、可扩展的数据中台产品。它同时结合了协同表格的易用性和数据库强大的数据处理能力。SeaTable 提供了 Restful API,这样你就可以很方便的随时随地通过 HTTP 协议来写入数据。

本文我们主要介绍怎么用 SeaTable 来记录服务器上多种服务的错误日志,实现日志的可视化,防止错误信息被忽视。总体的架构如下图:

image.png

示例如下图:

image.png

  • 日志用 Markdown 格式放在一个代码块中并记录到 SeaTable 的长文本列中
  • 我们可以用 SeaTable 多视图的功能建立多个不同的视图,每个视图包括特定的过滤条件,方便我们快速的删选查看数据

下面来具体介绍搭建过程。

用 filebeat 来把日志发送到 Redis

安装 filebeat

在宿主机上安装,以 Ubuntu 20.04 为例

apt update && apt install filebeat -y

filebeat 配置文件

vim /etc/filebeat/filebeat.yml

内容如下,根据实际配置修改

https://github.com/seatable/s...

filebeat.inputs:

  - type: log

    paths:

      - /opt/seatable/shared/seatable/logs/dtable_web.log        # 日志路径

    tags: ["dtable-web"]                                         # 对应表格中的 Service

    multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}|^[[0-9]{4}-[0-9]{2}-[0-9]{2}'

    multiline.negate: true        # 多行匹配,以日期开头的信息,例如:'2021-10-12' 或 '[2021-10-12'

    multiline.match: after

  
  - type: log

    paths:

      - /opt/seatable/shared/seatable/logs/dtable-server.log

    tags: ["dtable-server"]

    multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}|^[[0-9]{4}-[0-9]{2}-[0-9]{2}'

    multiline.negate: true

    multiline.match: after


output.redis:

  hosts: ["redis host"]

  password: "redis password"

  db: 0

  timeout: 5

  keys:

    - key: "seatable-error-logs"  # Redis key,不可修改

      when.contains:

        message: "[ERROR]"        # 匹配日志中的关键词

以上的示例配置适合于日志中的时间格式为类似 2021-10-12 或者 [2021-10-12开头,能够识别出多行的错误日志。

启动 filebeat

filebeat 会把匹配的日志发送到 Redis 中

service filebeat start

用脚本从 Redis 读取消息记录到 SeaTable

SeaTable 表

  1. 生成 API Token
  2. 创建以下列,区分大小写
名称首列类型Service√文本 或 单选Timex日期,精确到分钟Logx长文本

在宿主机上安装,路径 /opt/ 为例

cd /opt/

git clone [email protected]:seatable/seatable-syncer.git

安装 Python 依赖

cd seatable-syncer/log-sync/

pip3 install -r requirements.txt

vim log_syncer_settings.py

内容如下,根据实际配置修改

# SeaTable

server_url = 'SeaTable 服务器地址'

api_token = '表格的 api_token'

table_name = 'table name'


# Redis

redis_host = 'redis host'

redis_db = 0

redis_port = 6379

redis_password = None

脚本从 Redis 中读取匹配的日志,发送到 SeaTable 中

python3 log_syncer.py

log_syncer.py 能够处理以下格式开头的日志

2020-01-01 01:02:02

2020-01-01T01:02:02

[2020-01-01 01:02:02

[2020-01-01T01:02:02

如果你的日志格式不符合上面的要求,可以自行修改下文件 log_syncer.py 。

在 SeaTable 中共享和后续处理

在把日志同步到 SeaTable 的一个表格后,我们就可以方便的把日志信息共享到群组和其他个人,方便协同来分析问题。还可以使用 提醒规则自动化规则 将日志信息即时通知给协作人。还可以加入自动处理规则,比如符合某些条件的日志,加上可以忽略的标签,符合某些条件日志,加上待处理的标签。

通过 filebeat, Redis 和 Python 脚本,我们就可以收集多个服务器的日志到 SeaTable 的一个表格中。通过表格的过滤条件、多视图功能,我们可以方便的对日志进行分析和查看。通过共享协作功能,我们就可以方便的实现多人协同处理。此文抛砖引玉,希望大家发现 SeaTable 更多的用法,提升工作效率!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK