elasticsearch同步mysql数据库神器之go-mysql-elasticsearch

本文介绍了一款由国内开发者编写的go-mysql-elasticsearch插件,它能够实现MySQL与Elasticsearch之间的同步增删改查操作。文章详细阐述了插件的安装步骤,包括安装Go、godep及插件本身,并提供了配置文件river.toml的修改指南,涵盖了MySQL和Elasticsearch的连接设置、数据同步规则等关键信息。

       go-mysql-elasticsearch 是国内作者开发的一款插件。测试表明:该插件优点:能实现同步增、删、改、查操作。不足之处(待完善的地方):
1、日志不是很详细,但是能满足基本需求;
2、初始化时,无法自动同步mysql中存在的以前的数据,需要自行解决初始导入(如重建索引批量导入)

  1. go-mysql-elasticsearch 安装
    步骤1:安装go
    yum install go
    步骤2:安装godep
    go get github.com/tools/godep
    步骤3:获取go-mysql-elastisearch插件
    go get github.com/siddontang/go-mysql-elasticsearch
    步骤4:安装go-mysql-elastisearch插件
    cd $GOPATH/src/github.com/siddontang/go-mysql-elasticsearch
    make

  2. go-mysql-elasticsearch 使用
    1 修改配置文件 vi river.toml

MySQL address, user and password

user must have replication privilege in MySQL.

#以下为同步的mysql配置
my_addr = “127.0.0.1:3306”
my_user = “root”
my_pass = “123456”
my_charset = “utf8”

Set true when elasticsearch use https

#es_https = false

Elasticsearch address

es_addr = “192.168.100.90:9200”

Elasticsearch user and password, maybe set by shield, nginx, or x-pack

es_user = “”
es_pass = “”

Path to store data, like master.info, if not set or empty,

we must use this to support breakpoint resume syncing.

TODO: support other storage, like etcd.

data_dir = “./var”

Inner Http status address

stat_addr = “127.0.0.1:12800”

pseudo server id like a slave

server_id = 1001

mysql or mariadb

flavor = “mysql”

mysqldump execution path

if not set or empty, ignore mysqldump.

#mysqldump = “mysqldump”

if we have no privilege to use mysqldump with --master-data,

we must skip it.

#skip_master_data = false

minimal items to be inserted in one bulk

bulk_size = 128

force flush the pending requests if we don’t have enough items >= bulk_size

flush_bulk_time = “200ms”

Ignore table without primary key

skip_no_pk_table = false

MySQL data source

[[source]]
schema = “zkbh_nbjd”

Only below tables will be synced into Elasticsearch.

“t_[0-9]{4}” is a wildcard table format, you can use it if you have many sub tables, like table_0000 - table_1023

I don’t think it is necessary to sync all tables in a database.

#同步的数据表列表,多个表用,隔开
tables = [“sys_user”,“sys_log”]

Below is for special rule mapping

Very simple example

desc t;

±------±-------------±-----±----±--------±------+

| Field | Type | Null | Key | Default | Extra |

±------±-------------±-----±----±--------±------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(256) | YES | | NULL | |

±------±-------------±-----±----±--------±------+

The table t will be synced to ES index test and type t

同步zkbh_nbjd数据库下的sys_user表数据到索引user中
[[rule]]
schema = “zkbh_nbjd”
table = “sys_user”
index = “user”
type = “novel”

Wildcard table rule, the wildcard table must be in source tables

All tables which match the wildcard format will be synced to ES index test and type t.

In this example, all tables must have same schema with above table t;

同步zkbh_nbjd数据库下的sys_log表数据到索引log中
[[rule]]
schema = “zkbh_nbjd”
table = “sys_log”
index = “log”
type = “log”

3.启动 go-mysql-elasticsearch

cd /root/go/src/github.com/siddontang/go-mysql-elasticsearch
nohup ./bin/go-mysql-elasticsearch -config=./etc/river.toml & 为后台启动,否则会因为登录linux的用户退出而关闭服务。此处需要引入Screen 窗口管理器来保证 go-mysql-elasticsearch服务不会关闭,具体请查看相关资料

<think>好的,我现在需要帮助用户解决如何配置Suricata进行实时流量解析并将数据存储到数据库的问题。首先,我需要回忆Suricata的基本架构和功能。Suricata是一个开源的网络威胁检测工具,支持实时流量分析,能够生成各种日志和事件数据。用户的需求是将这些解析后的数据存储到数据库中,可能需要结合实时处理和持久化存储。 接下来,我需要考虑Suricata的输出模块。根据引用[4],Suricata支持标准的输出格式如JSON和YAML,并且可以集成到SIEM、Splunk、Elasticsearch等系统中。这说明Suricata本身可能具备将数据输出到数据库的能力,或者需要通过中间工具进行转发。 用户提到的引用[1]提到Redis和传统数据库的分层存储策略,可能适用于此场景。Suricata产生的实时数据可以暂存在Redis中,然后由其他程序写入数据库。但用户直接询问的是如何配置Suricata存储到数据库,所以需要先查看Suricata自身的数据库支持。 Suricata的配置文件通常是suricata.yaml,需要检查其中的输出部分。可能支持的数据库包括MySQL、PostgreSQL等,或者通过Eve-log格式输出到文件,再使用Logstash等工具导入数据库。引用[3]提到日志目录的配置,默认是/var/log/suricata,可能需要调整输出路径或启用数据库输出模块。 查找Suricata的官方文档,发现Eve-log(Extensible Event Format)是主要的输出方式,支持JSON格式的事件日志。要将这些日志存储到数据库,可能需要配置Eve-log输出,然后使用像Filebeat或Logstash这样的工具将日志实时发送到数据库。例如,Logstash可以读取Eve日志文件,解析JSON,然后写入MySQLElasticsearch。 另外,引用[5]提到了Suricata处理数据的具体函数,可能涉及文件提取或流处理,但用户的问题更多是关于存储配置,这部分可能不需要深入。 步骤可能包括: 1. 配置Suricata的Eve-log输出为JSON格式。 2. 设置日志文件的输出路径(参考引用[3]修改日志目录)。 3. 使用Logstash或自定义脚本读取JSON日志并写入数据库。 4. 可能需要配置数据库连接参数,或者在Suricata中启用数据库输出模块(如果支持的话)。 还需要考虑性能问题,如高流量下Suricata和数据库的负载,引用[1]的分层存储策略可能适用,使用Redis作为缓冲。不过用户的问题更侧重于配置方法,所以重点在Suricata本身的设置和日志处理流程。 总结:用户需要配置Suricata输出实时解析的数据到数据库,主要通过Eve-log生成JSON日志,再通过中间工具导入数据库。可能需要修改suricata.yaml中的输出配置,并搭配其他数据管道工具。</think>以下是如何配置Suricata实现实时流量解析并存储到数据库的步骤指南: ### 一、基础配置准备 1. **修改日志存储路径** 在`suricata.yaml`中修改默认日志目录(引用[3]建议路径): ```yaml default-log-dir: /var/data/suricata ``` 执行命令创建目录: ```bash mkdir -p /var/data/suricata && chown suricata:suricata /var/data/suricata ``` 2. **启用Eve-log输出** Eve-log是Suricata的标准JSON格式输出模块,支持细粒度的数据记录: ```yaml eve-log: enabled: yes filetype: regular filename: eve.json types: [flow, http, dns, tls, files, smtp, ssh, stats] # 按需选择数据类型 ``` ### 二、数据库存储实现方案 #### 方案1:通过Logstash管道写入数据库 1. **安装Logstash** ```bash wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list apt update && apt install logstash ``` 2. **配置Logstash管道** 创建`/etc/logstash/conf.d/suricata.conf`: ```ruby input { file { path => "/var/data/suricata/eve.json" start_position => "beginning" sincedb_path => "/dev/null" codec => "json" } } output { jdbc { driver_class => "com.mysql.cj.jdbc.Driver" connection_string => "jdbc:mysql://DB_HOST:3306/suricata_db?user=USER&password=PASS" statement => [ "INSERT INTO flows (timestamp, src_ip, dest_ip) VALUES (?, ?, ?)", "%{[@timestamp]}", "%{[src_ip]}", "%{[dest_ip]}" ] } } ``` #### 方案2:使用Redis暂存数据(引用[1]分层存储策略) 1. **配置Suricata输出到Redis** 在`suricata.yaml`中添加: ```yaml outputs: - redis: enabled: yes server: 127.0.0.1 port: 6379 mode: list key: suricata:alerts ``` 2. **编写消费程序** Python示例代码: ```python import redis import psycopg2 r = redis.Redis() conn = psycopg2.connect("dbname=suricata user=postgres") while True: _, data = r.blpop("suricata:alerts") cur = conn.cursor() cur.execute("INSERT INTO alerts (data) VALUES (%s)", (data.decode(),)) conn.commit() ``` ### 三、高级优化配置 1. **规则文件配置** 引用[4]强调规则的重要性,建议配置规则更新: ```yaml rule-files: - suricata.rules - emerging-threats.rules default-rule-path: /etc/suricata/rules ``` 2. **性能调优参数** ```yaml runmode: workers detect-engine: - rule-reload: true # 支持热更新规则 ``` ### 四、验证与监控 ```bash # 查看实时日志 tail -f /var/data/suricata/eve.json | jq # 检查数据库写入 mysql -u root -p -e "SELECT COUNT(*) FROM suricata_db.alerts" ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值