ELFK采集Oracle日志(二):使用Logstash从Kafka消费Oracle日志,并吐到ES

本文详细描述了如何使用Logstash8.9.2配置从多个Kafka主题收集Oracle日志,进行格式转换,然后将数据发送到Elasticsearch集群的过程,包括监控配置和SSL连接设置。
摘要由CSDN通过智能技术生成

curl -O https://artifacts.elastic.co/downloads/beats/filebeat/logstash-8.9.2-linux-x86_64.tar.gz
tar -xzvf logstash-8.9.2-linux-x86_64.tar.gz
mv logstash-8.9.2-linux-x86_64 logstash
cd logstash/config

vi logstash.yml
# 文末附内容

vi kafka_into_es.conf
# 文末附内容

cd ..
bin/logstash -f config/kafka_into_es.conf

logstash.yml

node.name: 1eventlog
pipeline.id: 1eventlog

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: Glkib_1
xpack.monitoring.elasticsearch.hosts: ["https://10.1.5.13:9200","https://10.1.5.14:9200","https://10.1.5.15:9200"]
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/home/app/logstash/config/elasticsearch-ca.pem"
xpack.monitoring.elasticsearch.ssl.verification_mode: certificate
xpack.monitoring.elasticsearch.sniffing: false

 kafka_into_es.conf

 input {
    kafka {
        bootstrap_servers => "10.1.5.9:9092"
        group_id => "oracle_logs"
        client_id => "oracle_log"
        id => "oracle_log"
        topics => ["oracle_database","oracle_listener","oracle_asm"]
        codec => json {
           charset => "UTF-8"
        }
        consumer_threads => 1
        add_field => { "[@metadata][appname]" => "oraclelog" }
    }
    kafka {
        bootstrap_servers => "10.1.5.9:9092"
        group_id => "oracle_logs"
        client_id => "oracle_log1"
        id => "oracle_log1"
        topics => ["oracle_clusterware"]
        codec => json {
           charset => "UTF-8"
        }
        consumer_threads => 1
        add_field => { "[@metadata][appname]" => "oracle_log" }
    }
}
filter {
    if [@metadata][appname] == "oraclelog" {
      grok{
        match => ["message","(?m)%{DAY}\ %{MONTH:month}\ %{MONTHDAY:day}\ %{TIME:time}\ %{YEAR:year}\n%{GREEDYDATA:info}[^\n]+"]
      }
      mutate {
        add_field => {"timestamp" => "%{year} %{month} %{day} %{time}"}
      }
      date {
        match => ["timestamp", "yyyy MMM dd HH:mm:ss"]
      }
      mutate {
        gsub => ["message", "\\x", "\\\x"]
        remove_field => ["@version","agent","event","ecs","input","tags","year","month","day","time","timestamp","message"]
      }
    }
    if [@metadata][appname] == "oracle_log" {
      grok{
        match => ["message","%{YEAR:year}\-%{MONTHNUM:month}\-%{MONTHDAY:day}\ %{TIME:time}\:\ \n%{GREEDYDATA:info}[^\n]+"]
      }
      mutate {
        add_field => {"timestamp" => "%{year} %{month} %{day} %{time}"}
      }
      date {
        match => ["timestamp", "yyyy MM dd HH:mm:ss.SSS"]
      }
      mutate {
        gsub => ["message", "\\x", "\\\x"]
        remove_field => ["@version","agent","event","ecs","input","tags","year","month","day","time","timestamp","message"]
      }
    }
}
output {
    if [@metadata][appname] == "oraclelog" {
        elasticsearch {
            hosts => ["10.1.5.13:9200","10.1.5.14:9200","10.1.5.15:9200"]
            user => "elastic"
            password => "app!236"
            ssl_enabled => true
            ssl_certificate_authorities => "/home/app/logstash/config/elasticsearch-ca.pem"
            index => "%{[@metadata][appname]}-%{+YYYY}"
        }
    } else if [@metadata][appname] == "oracle_log" {
        elasticsearch {
            hosts => ["10.1.5.13:9200","10.1.5.14:9200","10.1.5.15:9200"]
            user => "elastic"
            password => "app!236"
            ssl_enabled => true
            ssl_certificate_authorities => "/home/app/logstash/config/elasticsearch-ca.pem"
            index => "oraclelog-%{+YYYY}"
        }
    }
}

卡夫卡通过其内部的设计机制保证消息不被重复消费,主要依赖以下几个组件: 1. **分区(Partition)**:消息被划分为多个分区,每个分区都有唯一的分区ID。当消息发布到特定主题时,可以根据键值(key)的哈希值确定它会被发送到哪个分区。 2. **偏移量(Offset)**:每个分区都有一个独立的偏移量索引,记录了消费消费的位置。消息按照顺序存储,新的消息会替换旧的消息。 3. **消费者组(Consumer Group)**:一组消费者可以组成一个消费者组,它们共享相同的分区分配策略。这意味着如果有多个消费者订阅同一主题的分区,他们的消费进度将同步。 4. **幂等性(Idempotence)**:有些消息天生就是幂等的,即多次消费不会带来副作用。例如,更新数据库的操作,理论上执行多次结果一致。 5. **消息确认机制(Commit and Offset)**:消费者读取并处理完消息后,向Kafka服务器提交偏移量确认。如果消费者意外断开连接,Kafka基于这个已确认的偏移量继续推送给其他消费者。 6. **消息幂等标记(Offset Commit)**:Kafka允许设置消息幂等标记,如果消息无法正常处理,消费者可以选择回滚到上一个有效偏移量,防止重复处理。 7. **事务消息(Transactional Messages)**:对于一些需要原子性的操作,Kafka提供了一定的事务支持,确保消息要么全部成功,要么全部失败。 总之,通过以上机制,卡夫卡确保了消息在分布式环境下的唯一性,避免了重复消费的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值