1. 首页 > GoldenGate教程 > 正文

GoldenGate教程FG060-OGG与ELK日志分析平台集成实战

本文档风哥主要介绍Oracle GoldenGate与ELK日志分析平台集成的实战方法,包括ELK平台概念、集成架构、安装配置、日志处理、可视化配置等内容,风哥教程参考GoldenGate官方文档日志管理、ELK官方文档等内容,适合需要建立OGG日志分析平台的运维人员参考。

Part01-基础概念与理论知识

1.1 ELK日志分析平台概念

ELK是Elasticsearch、Logstash、Kibana三个开源项目的首字母缩写,是目前最流行的日志分析平台解决方案。更多视频教程www.fgedu.net.cn

ELK组件介绍:

  • Elasticsearch:分布式搜索和分析引擎
  • Logstash:日志采集和处理管道
  • Kibana:数据可视化平台
  • Beats:轻量级日志采集器
# ELK组件功能详解

# 1. Elasticsearch
功能:
– 分布式文档存储
– 全文搜索引擎
– 实时数据分析
– 聚合统计

特点:
– 高性能
– 可扩展
– 高可用
– RESTful API

# 2. Logstash
功能:
– 日志采集
– 数据过滤
– 数据转换
– 数据输出

特点:
– 插件丰富
– 灵活配置
– 支持多种数据源

# 3. Kibana
功能:
– 数据可视化
– 仪表板管理
– 报表生成
– 告警配置

特点:
– 图表丰富
– 交互式分析
– 易于使用

# 4. Beats
功能:
– Filebeat:文件日志采集
– Metricbeat:指标采集
– Heartbeat:心跳检测

特点:
– 轻量级
– 低资源占用
– 易于部署

# ELK版本选择
| 版本系列 | 说明 | 推荐场景 |
|———–|——————|——————|
| 7.x | 稳定版本 | 生产环境推荐 |
| 8.x | 最新版本 | 新功能体验 |
| 6.x | 旧版本 | 维护升级 |

1.2 OGG与ELK集成架构

OGG与ELK集成可以实现OGG日志的集中管理和分析:

# 集成架构图

OGG服务器 ELK服务器
+——————+ +——————+
| OGG进程 | | Elasticsearch |
| – Manager | | – 索引存储 |
| – Extract | | – 数据搜索 |
| – Replicat | +——————+
+——————+ |
| |
v v
+——————+ +——————+
| OGG日志文件 | | Kibana |
| – 进程日志 | | – 可视化仪表板 |
| – 错误日志 | | – 报表分析 |
| – Trail日志 | +——————+
+——————+ |
| |
v v
+——————+ +——————+
| Filebeat | 网络传输 | Logstash |
| – 日志采集 | ———> | – 日志解析 |
| – 日志过滤 | | – 数据转换 |
+——————+ +——————+

# 数据流向
1. OGG进程产生日志文件
2. Filebeat采集日志文件
3. Filebeat发送到Logstash
4. Logstash解析和转换日志
5. Logstash存储到Elasticsearch
6. Kibana可视化展示

# 集成优势
1. 集中管理:所有OGG日志集中存储
2. 快速检索:全文搜索快速定位问题
3. 可视化:图表展示日志趋势
4. 告警:基于日志内容配置告警
5. 归档:长期保存历史日志

# OGG日志类型
| 日志类型 | 位置 | 内容 |
|—————–|————————|——————|
| 进程报告日志 | dirrpt/*.rpt | 进程运行报告 |
| 错误日志 | dirrpt/*.err | 错误信息 |
| 丢弃日志 | dirrpt/*.dsc | 丢弃记录 |
| Manager日志 | dirrpt/MGR.rpt | Manager运行日志 |
| 诊断日志 | dirrpt/*.dmp | 诊断信息 |

1.3 日志分析的价值与意义

通过ELK分析OGG日志可以带来多方面的价值:

# 价值1:问题快速定位
场景:OGG进程异常停止
传统方式:
– 登录服务器
– 查看多个日志文件
– 手动分析错误信息

ELK方式:
– Kibana搜索错误关键字
– 快速定位问题原因
– 查看历史类似问题

效率提升:问题定位时间从小时级缩短到分钟级

# 价值2:趋势分析
场景:分析OGG性能趋势
传统方式:
– 手动收集统计数据
– Excel制作图表
– 定期人工分析

ELK方式:
– 自动采集日志数据
– Kibana实时图表
– 趋势自动分析

效率提升:实时监控,自动预警

# 价值3:合规审计
场景:满足审计要求
传统方式:
– 手动归档日志
– 定期检查日志
– 人工生成报告

ELK方式:
– 自动归档存储
– 完整审计日志
– 自动生成报告

效率提升:合规成本降低50%

# 价值4:知识积累
场景:问题知识库建设
传统方式:
– 文档记录问题
– 手动维护知识库
– 检索效率低

ELK方式:
– 日志自动分类
– 问题自动关联
– 快速检索历史

效率提升:知识复用效率提升

# 日志分析应用场景
| 场景 | 分析内容 | 价值 |
|—————-|———————-|——————|
| 故障诊断 | 错误日志分析 | 快速定位问题 |
| 性能优化 | 性能指标分析 | 发现性能瓶颈 |
| 安全审计 | 操作日志审计 | 满足合规要求 |
| 容量规划 | 数据量趋势分析 | 提前规划资源 |
| 运维优化 | 运维效率分析 | 持续改进流程 |

风哥提示:日志分析是运维工作的重要组成部分,通过ELK平台可以实现日志的集中管理、快速检索和可视化分析,大幅提升运维效率。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 ELK平台部署规划

合理的部署规划是ELK平台稳定运行的基础:

ELK部署规划要点:

  • 确定部署架构
  • 规划硬件资源
  • 设计存储策略
  • 配置网络访问
  • 制定安全策略
# 部署架构选择

# 架构1:单节点部署
适用场景:
– 测试环境
– 日志量小(<10GB/天) - 非关键业务 配置: - 单台服务器 - 所有组件部署在一台机器 - 无高可用 # 架构2:三节点集群 适用场景: - 生产环境 - 日志量中等(10-50GB/天) - 需要高可用 配置: - 3台Elasticsearch节点 - 2台Logstash(主备) - 2台Kibana(负载均衡) # 架构3:大规模集群 适用场景: - 大型企业 - 日志量大(>50GB/天)
– 多数据中心

配置:
– Elasticsearch集群(5+节点)
– Logstash集群
– Kafka缓冲层
– 多Kibana实例

# 硬件资源规划
| 组件 | CPU | 内存 | 存储 | 数量 |
|————–|——–|——–|————-|——–|
| Elasticsearch | 8核 | 32GB | 1TB SSD | 3 |
| Logstash | 4核 | 16GB | 200GB | 2 |
| Kibana | 2核 | 8GB | 100GB | 2 |
| Filebeat | 1核 | 2GB | – | N |

# 存储规划
# Elasticsearch索引存储
– 热数据:SSD存储,保留7天
– 温数据:HDD存储,保留30天
– 冷数据:归档存储,保留1年

# 索引生命周期管理
– Hot阶段:高性能存储,实时查询
– Warm阶段:降低性能要求,历史查询
– Cold阶段:归档存储,低频查询
– Delete阶段:自动删除过期数据

# 网络规划
| 组件 | 端口 | 协议 | 访问控制 |
|————–|———–|———|—————|
| Elasticsearch | 9200/9300 | HTTP | 内网访问 |
| Logstash | 5044 | Beats | 内网访问 |
| Kibana | 5601 | HTTP | 受控访问 |
| Filebeat | – | 出站 | 到Logstash |

2.2 日志采集策略规划

制定合理的日志采集策略可以平衡性能和需求:

# 日志采集范围

# 必须采集的日志
| 日志类型 | 文件路径 | 采集频率 |
|—————–|——————————-|———–|
| 进程报告日志 | /GoldenGate/app/dirrpt/*.rpt | 实时 |
| 错误日志 | /GoldenGate/app/dirrpt/*.err | 实时 |
| Manager日志 | /GoldenGate/app/dirrpt/MGR.rpt| 实时 |

# 可选采集的日志
| 日志类型 | 文件路径 | 采集频率 |
|—————–|——————————-|———–|
| 丢弃日志 | /GoldenGate/app/dirrpt/*.dsc | 实时 |
| 诊断日志 | /GoldenGate/app/dirrpt/*.dmp | 按需 |
| 操作日志 | /GoldenGate/app/ggserr.log | 实时 |

# 日志字段设计
{
“@timestamp”: “2026-04-10T10:00:00.000Z”,
“host”: “fgedu.net.cn”,
“source”: “/GoldenGate/app/dirrpt/E_FGEDU01.rpt”,
“message”: “OGG原始日志内容”,
“ogg”: {
“process_type”: “EXTRACT”,
“process_name”: “E_FGEDU01”,
“status”: “RUNNING”,
“log_level”: “INFO”,
“checkpoint_lag”: “00:00:00”,
“trail_seq”: “123”,
“trail_rba”: “456789”
},
“error”: {
“code”: “OGG-00123”,
“message”: “错误描述”,
“severity”: “ERROR”
}
}

# 日志过滤策略
# 1. 排除无关日志
– 排除DEBUG级别日志
– 排除定期状态报告
– 排除心跳日志

# 2. 合并多行日志
– 合并堆栈跟踪
– 合并长文本错误

# 3. 敏感信息脱敏
– 脱敏密码字段
– 脱敏IP地址
– 脱敏用户名

# 日志保留策略
| 日志级别 | 保留时间 | 存储位置 |
|———–|———–|———–|
| ERROR | 90天 | Elasticsearch |
| WARNING | 60天 | Elasticsearch |
| INFO | 30天 | Elasticsearch |
| DEBUG | 7天 | 本地文件 |

2.3 可视化仪表板规划

设计合理的可视化仪表板可以直观展示OGG运行状态:

# 仪表板分类

# 1. 总览仪表板
展示内容:
– OGG进程总览
– 健康状态统计
– 关键指标汇总
– 最近告警列表

适用人员:
– 运维管理者
– 技术主管

# 2. 运维仪表板
展示内容:
– 进程详细状态
– 延迟趋势图
– 性能指标图
– 错误统计图

适用人员:
– OGG运维人员
– 技术支持人员

# 3. 分析仪表板
展示内容:
– 日志趋势分析
– 错误分类统计
– 性能趋势分析
– 容量规划分析

适用人员:
– 技术专家
– 架构师

# 可视化图表类型
| 图表类型 | 适用场景 | 示例 |
|———–|———————-|——————|
| 折线图 | 趋势展示 | 延迟趋势 |
| 柱状图 | 对比分析 | 错误类型统计 |
| 饼图 | 占比分析 | 进程状态分布 |
| 表格 | 详细列表 | 错误日志列表 |
| 指标卡 | 关键指标 | 当前延迟 |
| 热力图 | 时间分布 | 错误时间分布 |

# 仪表板布局示例
+——————————————+
| OGG总览仪表板 |
+——————————————+
| 进程状态: 5运行 0停止 0异常 |
| 平均延迟: 00:00:05 |
| 今日错误: 0 |
+——————————————+
| 进程状态分布 | 延迟趋势图 |
| [饼图] | [折线图] |
+——————————————+
| 错误类型统计 | 性能趋势图 |
| [柱状图] | [折线图] |
+——————————————+
| 最近错误日志列表 |
| [表格] |
+——————————————+

风哥提示:仪表板设计要以用户需求为导向,不同角色关注不同的指标,建议为不同角色设计专属仪表板。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 ELK平台安装配置实战

3.1.1 Elasticsearch安装配置

# 步骤1:安装Java环境
$ yum install -y java-11-openjdk java-11-openjdk-devel

$ java -version
openjdk version “11.0.2” 2019-01-15 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.2+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode, sharing)

# 步骤2:添加Elasticsearch仓库
$ rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch

$ vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# 步骤3:安装Elasticsearch
$ yum install -y elasticsearch

# 步骤4:配置Elasticsearch
$ vi /etc/elasticsearch/elasticsearch.yml

cluster.name: ogg-elk-cluster
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: [“192.168.1.100”, “192.168.1.101”, “192.168.1.102”]
cluster.initial_master_nodes: [“node-1”, “node-2”, “node-3”]

# 步骤5:配置JVM内存
$ vi /etc/elasticsearch/jvm.options

-Xms16g
-Xmx16g

# 步骤6:启动Elasticsearch
$ systemctl daemon-reload
$ systemctl enable elasticsearch
$ systemctl start elasticsearch

# 步骤7:验证安装
$ curl -X GET “localhost:9200”

{
“name” : “node-1”,
“cluster_name” : “ogg-elk-cluster”,
“cluster_uuid” : “xxx-xxx-xxx”,
“version” : {
“number” : “7.17.0”,
“build_flavor” : “default”,
“build_type” : “rpm”,
“build_hash” : “xxx”,
“build_date” : “2022-01-28T08:36:04.875279988Z”,
“build_snapshot” : false,
“lucene_version” : “8.11.1”,
“minimum_wire_compatibility_version” : “6.8.0”,
“minimum_index_compatibility_version” : “6.0.0-beta1”
},
“tagline” : “You Know, for Search”
}

# 步骤8:检查集群状态
$ curl -X GET “localhost:9200/_cluster/health?pretty”

{
“cluster_name” : “ogg-elk-cluster”,
“status” : “green”,
“timed_out” : false,
“number_of_nodes” : 3,
“number_of_data_nodes” : 3,
“active_primary_shards” : 1,
“active_shards” : 2,
“relocating_shards” : 0,
“initializing_shards” : 0,
“unassigned_shards” : 0,
“delayed_unassigned_shards” : 0,
“number_of_pending_tasks” : 0,
“number_of_in_flight_fetch” : 0,
“task_max_waiting_in_queue_millis” : 0,
“active_shards_percent_as_number” : 100.0
}

3.1.2 Logstash安装配置

# 步骤1:安装Logstash
$ yum install -y logstash

# 步骤2:配置Logstash
$ vi /etc/logstash/logstash.yml

path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d
path.logs: /var/log/logstash

# 步骤3:创建OGG日志处理配置
$ vi /etc/logstash/conf.d/ogg-log.conf

input {
beats {
port => 5044
}
}

filter {
if [fields][log_type] == “ogg-process” {
grok {
match => {
“message” => [
“%{TIMESTAMP_ISO8601:timestamp}\s+%{WORD:log_level}\s+OGG-%{NUMBER:error_code}\s+%{GREEDYDATA:error_message}”,
“%{TIMESTAMP_ISO8601:timestamp}\s+%{WORD:log_level}\s+%{GREEDYDATA:message}”
]
}
}

date {
match => [“timestamp”, “yyyy-MM-dd HH:mm:ss”]
target => “@timestamp”
}

mutate {
add_field => {
“process_type” => “%{[fields][process_type]}”
“process_name” => “%{[fields][process_name]}”
}
}

if [error_code] {
mutate {
add_tag => [“error”]
}
}
}
}

output {
if [fields][log_type] == “ogg-process” {
elasticsearch {
hosts => [“http://localhost:9200”]
index => “ogg-log-%{+YYYY.MM.dd}”
}
}
}

# 步骤4:启动Logstash
$ systemctl enable logstash
$ systemctl start logstash

# 步骤5:验证Logstash状态
$ systemctl status logstash

● logstash.service – Logstash
Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2026-04-10 10:00:00 CST; 1min ago
Main PID: 12345 (java)
CGroup: /system.slice/logstash.service
└─12345 /usr/share/logstash/jdk/bin/java …

# 步骤6:检查端口监听
$ netstat -tlnp | grep 5044

tcp6 0 0 :::5044 :::* LISTEN 12345/java

3.1.3 Kibana安装配置

# 步骤1:安装Kibana
$ yum install -y kibana

# 步骤2:配置Kibana
$ vi /etc/kibana/kibana.yml

server.port: 5601
server.host: “0.0.0.0”
elasticsearch.hosts: [“http://localhost:9200”]
kibana.index: “.kibana”

# 步骤3:启动Kibana
$ systemctl enable kibana
$ systemctl start kibana

# 步骤4:访问Kibana
http://192.168.1.100:5601

# 步骤5:创建索引模式
# 在Kibana界面操作:
# 1. 进入 Management -> Index Patterns
# 2. 点击 “Create index pattern”
# 3. 输入索引模式:ogg-log-*
# 4. 选择时间字段:@timestamp
# 5. 点击 “Create index pattern”

3.2 Logstash日志处理配置实战

3.2.1 OGG日志解析配置

# 步骤1:创建完整的OGG日志解析配置
$ vi /etc/logstash/conf.d/ogg-complete.conf

input {
beats {
port => 5044
tags => [“ogg”]
}
}

filter {
# 解析OGG进程报告日志
if [fields][log_type] == “ogg-report” {
grok {
match => {
“message” => [
# 匹配进程状态信息
“^%{WORD:process_type}\s+%{WORD:process_name}\s+Last Started %{TIMESTAMP_ISO8601:last_start}\s+Status %{WORD:status}”,
# 匹配检查点延迟
“^Checkpoint Lag\s+%{TIME:checkpoint_lag}”,
# 匹配Trail文件信息
“^Trail File Seqno\s+%{NUMBER:trail_seq}”,
# 匹配错误信息
“^%{TIMESTAMP_ISO8601:timestamp}\s+%{WORD:log_level}\s+OGG-%{NUMBER:error_code}”,
# 匹配一般信息
“^%{TIMESTAMP_ISO8601:timestamp}\s+%{WORD:log_level}\s+%{GREEDYDATA:log_message}”
]
}
tag_on_failure => [“_grokparsefailure_ogg”]
}

# 时间解析
if [timestamp] {
date {
match => [“timestamp”, “yyyy-MM-dd HH:mm:ss”]
target => “@timestamp”
}
}

# 添加字段
mutate {
add_field => {
“log_source” => “ogg”
“host_name” => “%{[host][name]}”
}
}

# 错误标记
if [error_code] {
mutate {
add_tag => [“error”, “ogg-error”]
}
}

# 警告标记
if [log_level] == “WARNING” {
mutate {
add_tag => [“warning”, “ogg-warning”]
}
}
}

# 解析OGG错误日志
if [fields][log_type] == “ogg-error” {
grok {
match => {
“message” => [
“^%{TIMESTAMP_ISO8601:timestamp}\s+%{WORD:log_level}\s+OGG-%{NUMBER:error_code}\s+%{GREEDYDATA:error_message}”
]
}
}

mutate {
add_tag => [“error”, “ogg-error”]
}
}

# 解析OGG丢弃日志
if [fields][log_type] == “ogg-discard” {
grok {
match => {
“message” => [
“^%{TIMESTAMP_ISO8601:timestamp}\s+Discarding record at seqno %{NUMBER:seqno} rba %{NUMBER:rba}”
]
}
}

mutate {
add_tag => [“discard”, “ogg-discard”]
}
}
}

output {
# 输出到Elasticsearch
elasticsearch {
hosts => [“http://localhost:9200”]
index => “ogg-log-%{+YYYY.MM.dd}”
template_name => “ogg-log”
template_overwrite => true
}

# 错误日志额外输出到文件
if “error” in [tags] {
file {
path => “/var/log/logstash/ogg-errors.log”
}
}
}

# 步骤2:创建索引模板
$ curl -X PUT “localhost:9200/_template/ogg-log” -H ‘Content-Type: application/json’ -d’
{
“index_patterns”: [“ogg-log-*”],
“settings”: {
“number_of_shards”: 3,
“number_of_replicas”: 1
},
“mappings”: {
“properties”: {
“@timestamp”: { “type”: “date” },
“process_type”: { “type”: “keyword” },
“process_name”: { “type”: “keyword” },
“status”: { “type”: “keyword” },
“log_level”: { “type”: “keyword” },
“error_code”: { “type”: “keyword” },
“error_message”: { “type”: “text” },
“checkpoint_lag”: { “type”: “keyword” },
“trail_seq”: { “type”: “integer” },
“host_name”: { “type”: “keyword” },
“message”: { “type”: “text” }
}
}
}’

# 步骤3:重启Logstash
$ systemctl restart logstash
from GoldenGate视频:www.itpux.com

3.2.2 Filebeat采集配置

# 步骤1:在OGG服务器安装Filebeat
$ yum install -y filebeat

# 步骤2:配置Filebeat
$ vi /etc/filebeat/filebeat.yml

filebeat.inputs:
# OGG进程报告日志
– type: log
enabled: true
paths:
– /GoldenGate/app/dirrpt/*.rpt
fields:
log_type: ogg-report
fields_under_root: false
multiline:
pattern: ‘^[0-9]{4}-[0-9]{2}-[0-9]{2}’
negate: true
match: after

# OGG错误日志
– type: log
enabled: true
paths:
– /GoldenGate/app/dirrpt/*.err
fields:
log_type: ogg-error
fields_under_root: false

# OGG丢弃日志
– type: log
enabled: true
paths:
– /GoldenGate/app/dirrpt/*.dsc
fields:
log_type: ogg-discard
fields_under_root: false

# OGG Manager日志
– type: log
enabled: true
paths:
– /GoldenGate/app/dirrpt/MGR.rpt
fields:
log_type: ogg-manager
fields_under_root: false

# 输出到Logstash
output.logstash:
hosts: [“192.168.1.100:5044”]
bulk_max_size: 2048

# 处理器
processors:
– add_host_metadata:
when.not.contains.tags: forwarded
– add_cloud_metadata: ~
– add_docker_metadata: ~

# 步骤3:启动Filebeat
$ systemctl enable filebeat
$ systemctl start filebeat

# 步骤4:验证日志采集
$ curl -X GET “localhost:9200/ogg-log-*/_search?pretty&size=1”

{
“took” : 5,
“timed_out” : false,
“_shards” : {
“total” : 3,
“successful” : 3,
“skipped” : 0,
“failed” : 0
},
“hits” : {
“total” : {
“value” : 1000,
“relation” : “eq”
},
“max_score” : 1.0,
“hits” : [
{
“_index” : “ogg-log-2026.04.10”,
“_type” : “_doc”,
“_id” : “xxx”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2026-04-10T10:00:00.000Z”,
“host” : {
“name” : “fgedu.net.cn”
},
“log_level” : “INFO”,
“message” : “Process E_FGEDU01 is running”,
“process_name” : “E_FGEDU01”,
“process_type” : “EXTRACT”,
“status” : “RUNNING”
}
}
]
}
}

3.3 Kibana可视化配置实战

3.3.1 创建OGG监控仪表板

# 步骤1:创建索引模式
# 在Kibana界面:
# 1. Management -> Index Patterns -> Create index pattern
# 2. Index pattern name: ogg-log-*
# 3. Time field: @timestamp

# 步骤2:创建可视化图表

# 图表1:进程状态饼图
# Visualization -> Create visualization -> Pie
# Index pattern: ogg-log-*
# Aggregation: Terms
# Field: status.keyword

# 图表2:延迟趋势折线图
# Visualization -> Create visualization -> Line
# Index pattern: ogg-log-*
# X-axis: Date Histogram, Field: @timestamp
# Y-axis: Average, Field: checkpoint_lag_seconds

# 图表3:错误统计柱状图
# Visualization -> Create visualization -> Vertical Bar
# Index pattern: ogg-log-*
# X-axis: Date Histogram, Field: @timestamp
# Y-axis: Count
# Split series: Filter, query: tags: “error”

# 图表4:错误类型表格
# Visualization -> Create visualization -> Data Table
# Index pattern: ogg-log-*
# Buckets: Split rows
# Aggregation: Terms, Field: error_code.keyword
# Metric: Count

# 步骤3:创建仪表板
# Dashboard -> Create new dashboard

# 添加以下可视化:
# 1. 进程状态饼图
# 2. 延迟趋势折线图
# 3. 错误统计柱状图
# 4. 错误类型表格
# 5. 关键指标卡片

# 步骤4:配置告警
# 在Kibana界面:
# 1. Management -> Watcher
# 2. Create Watch

# 示例告警配置
{
“trigger”: {
“schedule”: {
“interval”: “1m”
}
},
“input”: {
“search”: {
“request”: {
“indices”: [“ogg-log-*”],
“body”: {
“query”: {
“bool”: {
“must”: [
{
“range”: {
“@timestamp”: {
“from”: “now-5m”
}
}
},
{
“term”: {
“tags”: “error”
}
}
]
}
}
}
}
}
},
“condition”: {
“compare”: {
“ctx.payload.hits.total”: {
“gt”: 0
}
}
},
“actions”: {
“email_admin”: {
“email”: {
“to”: “dba@fgedu.net.cn”,
“subject”: “OGG Error Alert”,
“body”: “Found {{ctx.payload.hits.total}} errors in the last 5 minutes”
}
}
}
}

# 步骤5:保存仪表板
# Dashboard -> Save -> “OGG监控仪表板”

3.3.2 创建日志搜索模板

# 步骤1:创建常用搜索

# 搜索1:错误日志搜索
# Discover -> Create search
# Query: tags: “error”
# Save as: “OGG错误日志”

# 搜索2:特定进程日志
# Query: process_name: “E_FGEDU01”
# Save as: “E_FGEDU01进程日志”

# 搜索3:延迟告警日志
# Query: checkpoint_lag_seconds: >60
# Save as: “OGG延迟告警”

# 步骤2:创建搜索模板脚本
#!/bin/bash
# ogg_log_search.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

ES_HOST=”localhost:9200″
INDEX=”ogg-log-*”

# 搜索错误日志
search_errors() {
local hours=$1

curl -s -X GET “${ES_HOST}/${INDEX}/_search” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“bool”: {
“must”: [
{
“term”: {
“tags”: “error”
}
},
{
“range”: {
“@timestamp”: {
“gte”: “now-‘${hours}’h”
}
}
}
]
}
},
“sort”: [
{
“@timestamp”: {
“order”: “desc”
}
}
],
“size”: 100
}’ | jq ‘.hits.hits[]._source’
}

# 搜索特定进程日志
search_process() {
local process_name=$1

curl -s -X GET “${ES_HOST}/${INDEX}/_search” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“term”: {
“process_name”: “‘${process_name}'”
}
},
“sort”: [
{
“@timestamp”: {
“order”: “desc”
}
}
],
“size”: 50
}’ | jq ‘.hits.hits[]._source’
}

# 统计错误数量
count_errors() {
local hours=$1

curl -s -X GET “${ES_HOST}/${INDEX}/_count” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“bool”: {
“must”: [
{
“term”: {
“tags”: “error”
}
},
{
“range”: {
“@timestamp”: {
“gte”: “now-‘${hours}’h”
}
}
}
]
}
}
}’ | jq ‘.count’
}

case “$1” in
errors)
search_errors $2
;;
process)
search_process $2
;;
count)
count_errors $2
;;
*)
echo “用法: $0 {errors|process|count} [参数]”
;;
esac

# 使用示例
$ ./ogg_log_search.sh errors 24
$ ./ogg_log_search.sh process E_FGEDU01
$ ./ogg_log_search.sh count 1

Part04-生产案例与实战讲解

4.1 企业级日志分析案例

某大型企业OGG日志分析平台实施案例:

# 项目背景
– 环境:20套OGG同步链路
– 日志量:约50GB/天
– 要求:集中管理、快速检索、可视化分析

# 实施架构
+——————+ +——————+ +——————+
| OGG服务器1 | | OGG服务器2 | | OGG服务器N |
| Filebeat | | Filebeat | | Filebeat |
+——————+ +——————+ +——————+
| | |
+————————+————————+
|
v
+——————+
| Kafka集群 |
| (日志缓冲) |
+——————+
|
v
+——————+
| Logstash集群 |
| (日志处理) |
+——————+
|
v
+——————+
| Elasticsearch |
| (3节点集群) |
+——————+
|
v
+——————+
| Kibana |
| (可视化) |
+——————+

# 实施效果
1. 日志集中管理:所有OGG日志集中存储
2. 快速检索:秒级检索历史日志
3. 可视化分析:实时监控仪表板
4. 告警通知:自动告警异常情况
5. 合规审计:满足审计要求

# 关键指标
| 指标 | 实施前 | 实施后 | 改善 |
|—————|————-|————-|———-|
| 问题定位时间 | 2小时 | 10分钟 | 90% |
| 日志检索时间 | 30分钟 | 10秒 | 99% |
| 告警响应时间 | 30分钟 | 5分钟 | 83% |
| 运维效率 | 基准 | 提升3倍 | 200% |

# 仪表板展示内容
1. 总览仪表板
– 进程状态总览
– 关键指标汇总
– 最近告警列表

2. 运维仪表板
– 进程详细状态
– 延迟趋势图
– 性能指标图

3. 分析仪表板
– 日志趋势分析
– 错误分类统计
– 容量规划分析

4.2 日志分析常见问题

# 问题1:日志解析失败
# 现象
日志显示_grokparsefailure标签

# 原因分析
Grok模式不匹配日志格式

# 解决方案
# 1. 分析日志格式
# 2. 调整Grok模式
# 3. 使用Grok Debugger调试

# 在Kibana Dev Tools中调试
POST _ingest/pipeline/_simulate
{
“pipeline”: {
“processors”: [
{
“grok”: {
“field”: “message”,
“patterns”: [“%{TIMESTAMP_ISO8601:timestamp} %{WORD:level} %{GREEDYDATA:msg}”]
}
}
]
},
“docs”: [
{
“_source”: {
“message”: “2026-04-10 10:00:00 INFO Process started”
}
}
]
}

# 问题2:存储空间不足
# 现象
Elasticsearch索引写入失败

# 解决方案
# 1. 配置索引生命周期管理
PUT _ilm/policy/ogg-log-policy
{
“policy”: {
“phases”: {
“hot”: {
“min_age”: “0ms”,
“actions”: {
“rollover”: {
“max_size”: “50gb”,
“max_age”: “1d”
}
}
},
“warm”: {
“min_age”: “7d”,
“actions”: {
“forcemerge”: {
“max_num_segments”: 1
}
}
},
“delete”: {
“min_age”: “30d”,
“actions”: {
“delete”: {}
}
}
}
}
}

# 问题3:查询性能慢
# 现象
Kibana查询响应时间长

# 解决方案
# 1. 优化索引设置
PUT ogg-log-*/_settings
{
“index”: {
“refresh_interval”: “30s”,
“number_of_replicas”: 1
}
}

# 2. 使用时间范围过滤
# 3. 避免通配符查询

4.3 日志分析解决方案

# 解决方案1:完整日志分析脚本
#!/bin/bash
# ogg_log_analysis.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

ES_HOST=”localhost:9200″
INDEX=”ogg-log-*”
REPORT_FILE=”/GoldenGate/app/logs/log_analysis_report.txt”

generate_report() {
echo “=== OGG日志分析报告 ===” > $REPORT_FILE
echo “生成时间: $(date)” >> $REPORT_FILE
echo “” >> $REPORT_FILE

# 统计今日错误数量
echo “今日错误统计:” >> $REPORT_FILE
curl -s -X GET “${ES_HOST}/${INDEX}/_count” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“bool”: {
“must”: [
{“term”: {“tags”: “error”}},
{“range”: {“@timestamp”: {“gte”: “now/d”}}}
]
}
}
}’ | jq ‘.count’ >> $REPORT_FILE

# 统计各进程状态
echo “” >> $REPORT_FILE
echo “进程状态统计:” >> $REPORT_FILE
curl -s -X GET “${ES_HOST}/${INDEX}/_search” -H ‘Content-Type: application/json’ -d’
{
“size”: 0,
“aggs”: {
“process_status”: {
“terms”: {
“field”: “status.keyword”
}
}
}
}’ | jq ‘.aggregations.process_status.buckets[]’ >> $REPORT_FILE

# 统计错误类型分布
echo “” >> $REPORT_FILE
echo “错误类型分布:” >> $REPORT_FILE
curl -s -X GET “${ES_HOST}/${INDEX}/_search” -H ‘Content-Type: application/json’ -d’
{
“size”: 0,
“query”: {
“term”: {“tags”: “error”}
},
“aggs”: {
“error_types”: {
“terms”: {
“field”: “error_code.keyword”,
“size”: 10
}
}
}
}’ | jq ‘.aggregations.error_types.buckets[]’ >> $REPORT_FILE

echo “” >> $REPORT_FILE
echo “=== 报告结束 ===” >> $REPORT_FILE
}

generate_report
cat $REPORT_FILE

# 解决方案2:日志告警脚本
#!/bin/bash
# ogg_log_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

ES_HOST=”localhost:9200″
INDEX=”ogg-log-*”
ALERT_THRESHOLD=5

check_errors() {
error_count=$(curl -s -X GET “${ES_HOST}/${INDEX}/_count” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“bool”: {
“must”: [
{“term”: {“tags”: “error”}},
{“range”: {“@timestamp”: {“gte”: “now-5m”}}}
]
}
}
}’ | jq ‘.count’)

if [ $error_count -gt $ALERT_THRESHOLD ]; then
# 发送告警
echo “发现 $error_count 个错误,超过阈值 $ALERT_THRESHOLD”

# 获取错误详情
curl -s -X GET “${ES_HOST}/${INDEX}/_search” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“bool”: {
“must”: [
{“term”: {“tags”: “error”}},
{“range”: {“@timestamp”: {“gte”: “now-5m”}}}
]
}
},
“sort”: [{“@timestamp”: “desc”}],
“size”: 10
}’ | jq ‘.hits.hits[]._source’
fi
}

check_errors

Part05-风哥经验总结与分享

5.1 日志分析最佳实践

根据多年日志分析经验,总结以下最佳实践:

日志分析最佳实践:

  • 建立完善的日志采集体系
  • 设计合理的日志解析规则
  • 配置有效的告警策略
  • 定期优化存储和性能
  • 持续改进分析能力
# 最佳实践1:日志采集
– 采集所有关键日志
– 配置合理的采集频率
– 处理好多行日志合并
– 做好日志轮转管理

# 最佳实践2:日志解析
– 使用标准化的字段名
– 处理好时区问题
– 添加必要的标签
– 保留原始日志

# 最佳实践3:日志存储
– 配置合理的保留周期
– 使用索引生命周期管理
– 定期清理过期数据
– 监控存储空间

# 最佳实践4:日志分析
– 建立常用搜索模板
– 配置可视化仪表板
– 设置告警规则
– 定期生成报告

5.2 日志分析检查清单

# 部署检查清单
[ ] ELK组件安装完成
[ ] 索引模板配置完成
[ ] 日志采集配置完成
[ ] 解析规则配置完成
[ ] 仪表板创建完成
[ ] 告警规则配置完成

# 运维检查清单
[ ] 日志正常采集
[ ] 索引正常写入
[ ] 查询性能正常
[ ] 告警正常发送
[ ] 存储空间充足

# 优化检查清单
[ ] 索引设置优化
[ ] 查询语句优化
[ ] 存储策略优化
[ ] 告警规则优化

5.3 风哥实战经验总结

在多年日志分析项目实施过程中,总结以下实战经验:

风哥实战经验:

  • 日志是运维的重要资产
  • 集中管理是第一步
  • 分析能力是关键
  • 告警要精准有效
  • 持续优化是常态
# 经验1:日志采集
– 不要遗漏关键日志
– 采集频率要合理
– 处理好日志格式

# 经验2:日志解析
– 解析规则要全面
– 测试验证要充分
– 保留原始日志

# 经验3:日志分析
– 分析要有目的
– 可视化要直观
– 告警要精准

风哥提示:日志分析平台是运维工作的重要支撑,建议根据实际需求逐步建设,从简单到复杂,持续优化改进。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息