第一部分:介绍
数据库系统中的审计日志是维护数据安全和合规性的关键部分。了解谁访问了数据库,以及执行了哪些操作,对于确保数据的完整性和可用性至关重要。在这个博客文章中,我们将探讨如何使用 Fluent Bit 与 Loki 集成,以采集和分析 MySQL 数据库的审计日志。Fluent Bit 是一款轻量级、高性能的日志数据收集器,而 Loki 是一种强大的分布式日志聚合和查询系统。
MySQL 数据库是业界最常用的关系型数据库之一,也是许多企业的核心数据存储系统。审计数据库活动对于确保数据的安全性和合规性至关重要,因此将其日志数据有效地采集和分析变得至关重要。
第二部分:安装和配置 Fluent Bit
步骤 1:安装 Fluent Bit
首先,确保你已经安装了 Fluent Bit。你可以使用以下命令在 CentOS 7 上安装 Fluent Bit:
下载对应版本的install.sh文件
#执行安装:
install.sh
#默认启动
/opt/fluent-bit/bin/fluent-bit -c //etc/fluent-bit/fluent-bit.conf
步骤 2:配置 Fluent Bit
接下来,创建一个 Fluent Bit 配置文件(fluent-bit.conf和fluent-bit-parser.conf),示例如下:
fluent-bit.conf文件示例:
[INPUT]
Name tail
Path /data/logs/audit*.log
Parser json-format
Tag inst001
Skip_Long_Lines On
Mem_Buf_Limit 5MB
[FILTER]
Name nest
Match inst001
Operation lift
Nested_under audit_record
Remove_prefix audit_record
[OUTPUT]
Name stdout
Match *
[OUTPUT]
Name loki
Match *
host 192.168.95.20
port 3100
Labels outer_prod_inst_id=inst001
fluent-bit-parser.conf文件示例:
[MULTILINE_PARSER]
name my-log-format
type regex
flush_timeout 1000
#
# Regex rules for multiline parsing
# ---------------------------------
#
# configuration hints:
#
# - first state always has the name: start_state
# - every field in the rule must be inside double quotes
#
# rules | state name | regex pattern | next state
# ------|---------------|--------------------------------------------
rule "start_state" "^(# Time: .*)" "second_state"
rule "second_state" "^(# User@Host: .*)" "third_state"
rule "third_state" "^(# Schema: .*)" "four_state"
rule "four_state" "^(# Query_time: .*)" "statement"
rule "statement" "^\w+.*|^\/\*.*" "statement"
[PARSER]
Name json-format
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S %z
步骤 3:根据新配置启动 Fluent Bit
/opt/fluent-bit/bin/fluent-bit -c fluent-bit.conf
第三部分:安装和配置 Loki
步骤 1:安装 Loki
现在,我们将在 CentOS 7 上直接安装 Loki。你可以使用以下命令进行安装:
下载安装包:loki-linux-amd64.zip
# extract the binary
unzip loki-linux-amd64.zip
# make sure it is executable
chmod a+x loki-linux-amd64
步骤 2:Loki 配置
Loki 需要一个配置文件,通常命名为 loki-local-config.yaml,注意下载与版本匹配的配置文件。
下载配置:loki-local-config.yaml
loki-local-config.yaml文件示例:
auth_enabled: false
common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
步骤 3:启动Loki
后台启动loki,并将日志打印到loki_log文件中。
nohup ./loki-linux-amd64 -config.file=loki-local-config.yaml >loki_log 2>&1 &
第四部分:MySQL开启审计日志配置
MySQL 审计日志是一种记录数据库活动的功能,可用于追踪谁在数据库上执行了什么操作。在开始配置 Fluent Bit 以采集这些审计日志之前,我们需要确保 MySQL 已经启用了审计日志功能。
步骤 1:登录到 MySQL 服务器
首先,登录到你的 MySQL 服务器。你可以使用以下命令:
mysql -u root -p
步骤 2:开启审计日志
使用以下 SQL 命令开启审计日志:
-- 开启全量审计(不同数据库可能开启方式不同)
SET GLOBAL audit_log_policy=ALL;
-- 设置审计日志文件位置
SET GLOBAL audit_log_format=JSON;
-- 设置审计日志文件格式
SET GLOBAL audit_log_file='/data/logs/audit.log';
步骤 3:查看审计日志状态
要查看审计日志的状态和配置,可以使用以下 SQL 命令:
SHOW VARIABLES LIKE 'audit_log%';
确保审计日志已启用并配置正确。
现在,MySQL 审计日志已经开启并配置完毕,Fluent Bit 将能够采集这些审计日志并将其发送到 Loki 以供进一步分析和监控。
第五部分:示例用例 - 查询 Loki 中的审计日志数据
一旦 Fluent Bit 将 MySQL 审计日志数据发送到 Loki,你可以使用 Loki 的查询语言(LogQL)来执行各种查询,以便了解数据库活动和系统性能。查询的 URL 格式通常如下:
在这里,你需要将 替换为你想要执行的具体 Loki 查询语句。以下是一些示例用例,带有完整的 URL:
loki-server:3100/loki/api/v1/query?query=<Your_LogQL_Query>
示例用例 1:查询所有数据库操作
192.168.95.20:3100/loki/api/v1/query?query={outer_prod_inst_id="inst001"}
第六部分:参考资料
- Loki官网
- Fluent-bit官网