LogStash实践日志分析二:收集数据、入库、数据分析和kibana展示

本文介绍了一种通过Logstash从日志文件中提取数据并转换为UTF-8格式的方法,同时增加了IP地址信息并将数据存入Redis。接着,通过Redis将数据传输到Elasticsearch进行时间格式化处理以便于后续分析,最后利用Kibana进行数据展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、原始数据源服务器,从日志拉取数据,并转化为utf8编码,增加ip地址,保存到redis中,上配置如下:

input {
    file {
        path => "/tmp/activityserver.log"
        codec => json {
            charset => "GBK"
        }
        start_position => "beginning"
        sincedb_path => "/dev/null"
        type => "activitysun"
    }
}

filter {
    date {
        match => ["timestamp", "UNIX"]
        remove_field => ["time"]
    }
    #ruby {
    #    code => "event.timestamp.time.localtime"
    #}
    mutate {
        #some pc no host
	replace => { "host" => "192.168.1.11" }	
    }
}

output {
    #stdout {
    #    codec => plain {
    #        charset => "UTF-8"
    #    }
    #}
    file {
        path => "/tmp/logstash.log"
        codec => json {
            charset => "UTF-8"
        }
    }
    redis {
        host => ["192.168.1.18"]
        port => 26379
        data_type => "list"
        key => "activityserver"
        codec => json {
            charset => "UTF-8"
        }
    }
}

采用如下命令启动

/data/logstash-2.3.4/bin/logstash -f activitylog.conf

2、收集服务器,从redis拉取数据,放入elasticsearch,时间做一下处理,方便分析。配置如下:

input {
  redis {
    host => ["192.168.1.18"]
    port => 26379
    data_type => "list"
    key => "activityserver"
    codec => json {
      charset => "UTF-8"
    }
    #type => "activitysun"
  }
}

filter {
    ruby {
        code=>"event['daytag']=event.timestamp.time.localtime.strftime('%Y.%m.%d')"
    }
}

output {
  elasticsearch {
    hosts => ["127.0.0.1:19200"]
    index => "%{type}-%{daytag}"
    #index => "%{type}-%{+yyyy.MM.dd}"
  }
}
3、kibana展示




<think>首先,用户的问题是:“我想使用ELK实现数据修改日志记录 请问如何使用ELK Stack记录数据修改日志”。这涉及到使用ELK Stack(Elasticsearch, Logstash, Kibana)来记录数据修改的日志。 ELK Stack的核心组件: - **Elasticsearch**:用于存储索引日志数据。 - **Logstash**:用于收集、处理日志数据。 - **Kibana**:用于可视化查询日志数据。 用户想记录“数据修改日志”,这可能包括数据库中的数据变更,比如在应用程序中,当数据被创建、更新或删除时记录日志。 参考站内引用: - 引用[1]:提到Logstash从Nginx日志文件中读取日志,处理并转换为JSON格式,然后存储到Elasticsearch,最后在Kibana可视化。 - 引用[2]:涉及部署ELK Stack,包括Logstash配置、Filebeat的使用。 - 引用[3]:提到ELK Stack架构,包括Filebeat作为日志收集器。 - 引用[4]:讨论使用Filebeat收集日志文件,并提到在Kubernetes环境中使用ELK。 用户的需求是记录“数据修改日志”,所以需要确定如何捕获这些日志。常见的方式是: - 应用程序在数据修改时直接写入日志文件。 - 使用代理如Filebeat来收集这些日志文件。 - 或者,应用程序直接将日志发送到Logstash或Elasticsearch。 最佳实践是使用Filebeat或类似工具收集日志,然后由Logstash处理,存储到Elasticsearch。 步骤概述: 1. **日志生成**:确保应用程序在数据修改时生成日志。例如,在代码中添加日志语句,记录操作类型(如INSERT, UPDATE, DELETE)、时间戳、用户ID、修改的数据等。 2. **日志收集**:使用Filebeat监控日志文件,并将日志发送到Logstash。 3. **日志处理**:Logstash解析日志数据,转换为结构化格式(如JSON),并可能进行过滤、丰富等操作。 4. **数据存储**:Logstash将处理后的数据发送到Elasticsearch进行索引存储。 5. **数据可视化**:使用Kibana创建仪表板来查看分析日志。 回答结构: - 由于系统指令要求结构清晰,逐步解决问题,我将分步骤解释。 - 使用中文回答。 - 在行内数学表达式使用$...$,但这个问题可能不涉及数学,所以可能不需要。 - 独立公式使用$$...$$,但同样可能不适用。 - 末尾添加相关问题。 - 引用时自然地添加引用标识,如[^1]。 基于引用: - 引用[1]提到Logstash处理日志并转换为JSON,这适用于数据修改日志。 - 引用[2][4]提到Filebeat用于收集日志文件。 - 引用[4]特别提到使用Filebeat收集日志文件。 所以,回答应该包括: 1. 准备日志源。 2. 配置Filebeat。 3. 配置Logstash。 4. 设置ElasticsearchKibana。 5. 示例配置。 确保回答真实可靠:基于标准ELK实践。 最后,生成相关问题。</think>### 如何使用ELK Stack记录数据修改日志 使用ELK Stack(Elasticsearch, Logstash, Kibana)记录数据修改日志是一种高效的方式,适用于跟踪数据库或应用程序中的数据变更(如INSERT、UPDATE、DELETE操作)。以下是分步实现方案,基于ELK Stack的标准工作流程最佳实践。整个过程包括日志生成、收集、处理、存储可视化五个阶段[^1][^4]。 --- ### 步骤1: 准备日志源(应用程序层) 在应用程序中植入日志记录逻辑,确保每次数据修改时生成结构化日志: - **日志格式建议**:使用JSON格式,包含时间戳、操作类型、用户ID、修改前后的数据等字段。例如: ```json {"timestamp": "2023-10-05T14:30:00Z", "operation": "UPDATE", "user_id": "user123", "table": "users", "old_data": {"name": "Alice"}, "new_data": {"name": "Bob"}} ``` - **实现方式**: - 在代码关键位置(如DAO层或ORM钩子)添加日志语句。 - 输出到文件(如`/var/log/data_modification.log`),便于后续收集。 - **注意**:确保日志文件滚动更新,避免文件过大[^4]。 --- ### 步骤2: 日志收集(使用Filebeat) Filebeat作为轻量级日志收集器,监控日志文件并将数据推送给Logstash: - **安装与配置Filebeat**: 1. 下载并安装Filebeat(参考[官方文档](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html))。 2. 编辑Filebeat配置文件(`filebeat.yml`): ```yaml filebeat.inputs: - type: filestream paths: - /var/log/data_modification.log # 日志文件路径 json.keys_under_root: true # 解析JSON字段 fields: log_type: "data_modification" # 添加自定义标签 output.logstash: hosts: ["localhost:5044"] # Logstash地址 ``` 3. 启动Filebeat:`sudo systemctl start filebeat`。 - **优势**:Filebeat占用资源少,适合生产环境[^2][^4]。 --- ### 步骤3: 日志处理(使用LogstashLogstash接收Filebeat的数据,进行解析、过滤格式化: - **安装与配置Logstash**: 1. 下载并安装Logstash。 2. 创建Logstash配置文件(`logstash-data-modification.conf`): ```ruby input { beats { port => 5044 # 监听Filebeat端口 } } filter { # 添加额外处理(如解析时间戳、删除无效字段) date { match => ["timestamp", "ISO8601"] # 标准化时间戳 } mutate { remove_field => ["@version", "host"] # 清理冗余字段 } } output { elasticsearch { hosts => ["localhost:9200"] # Elasticsearch地址 index => "data-modification-logs-%{+YYYY.MM.dd}" # 按日期分索引 } } ``` 3. 启动Logstash:`bin/logstash -f logstash-data-modification.conf`。 - **关键点**:Logstash将JSON日志转换为Elasticsearch兼容格式,便于索引[^1][^3]。 --- ### 步骤4: 数据存储与索引(使用Elasticsearch) Elasticsearch存储索引处理后的日志: - **确保Elasticsearch运行**: - 启动Elasticsearch:`sudo systemctl start elasticsearch`。 - 验证数据:访问`http://localhost:9200/data-modification-logs-*/_search`查看日志是否入库。 - **优化建议**: - 使用索引生命周期管理(ILM)自动清理旧日志。 - 为敏感字段(如`user_id`)添加映射(mapping)确保类型安全[^1][^4]。 --- ### 步骤5: 数据可视化(使用KibanaKibana提供日志查询、分析仪表板功能: 1. **启动Kibana**:`sudo systemctl start kibana`,访问`http://localhost:5601`。 2. **创建索引模式**: - 在Kibana中进入"Management > Stack Management > Index Patterns",添加`data-modification-logs-*`。 3. **可视化日志**: - 使用"Discover"页面搜索日志(例如过滤`operation: "UPDATE"`)。 - 创建仪表板(Dashboard): - 添加饼图显示操作类型分布。 - 添加柱状图展示每日修改频率。 - 添加数据表格列出详细修改记录。 - 示例仪表板效果:监控高频修改或异常操作[^2][^4]。 --- ### 最佳实践与注意事项 - **性能优化**: - 在高负载场景下,引入Kafka作为缓冲区(引用[^3]架构),避免Logstash成为瓶颈。 - 使用Filebeat的负载均衡功能分发到多个Logstash实例。 - **安全**: - 为ElasticsearchKibana配置认证(如X-Pack或Nginx反向代理)。 - 在Logstash过滤器中脱敏敏感数据(如密码字段)。 - **错误处理**:监控FilebeatLogstash日志(`/var/log/filebeat/filebeat`),设置告警规则。 - **扩展性**:如果部署在Kubernetes中,使用DaemonSet部署Filebeat(引用[^4]方法)[^3][^4]。 通过以上步骤,ELK Stack可高效记录分析数据修改日志,帮助您审计数据变更、追踪问题或满足合规需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值