ELK(Elasticsearch,Logstash,Kibana) 搭建 同步 MySQL 及 用户权限安全设置

本文章用的elastic相关组件版本: 6.4.1html

一, 准备

Elasticsearch
Logstash
Kibana
jdk8 (主要根据Logstash的版本, 最新的6.6版本应该是能够支持jdk11了)
下载mysql-connector-java.jar找对应MySQL的版本
具体每一个插件的安装方式请查看官方文档, 很简单的, WIN下的都是绿色版, Linux的安装目录基本是在/usr/share/对应软件,配置文件目录在/etc/对应软件下面.java

二, Logstash与MySQL同步

1, Logstash的配置

input的配置 能够参考:https://www.elastic.co/guide/...mysql

input {
  jdbc {
    #多个输入或者输出的时候须要配置此项
    type => "article"
    jdbc_driver_library => "youpath/mysql-connector-java-5.1.47-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/yourdb"
    jdbc_user => "mysql_user"
    jdbc_password => "mysql_password"
    #是否启用分页查询, 就是limit
    jdbc_paging_enabled => true
    #每次查询多少
    jdbc_page_size => 50000
    #定时字段 各字段含义(由左至右)分、时、天、月、年,所有为*默认含义为每分钟都更新(测试结果,不一样的话请留言指出)
    schedule => "* * * * *"
    statement => "SELECT * FROM article WHERE id > :sql_last_value ORDER BY id ASC"
    #能够是语句, 也能够是指定的文件, 和上面的statement有一个就好了
    statement_filepath => "yourpath/logstash_jdbc_article.sql"
    #是否使用自定义标记列
    use_column_value => true
    #指定的列(字段)
    tracking_column => "id"
    #是否记录最后运行的指标
    record_last_run => true
    #记录的指标存储路径, 当多个input的时候, 这个是必需要设置的, 不然多个input会共用一个
    last_run_metadata_path => "yourpath/logstash_jdbc_last_run_article"
  }
}

schedule的写法
默认* * * * *是每分钟一次, 这个的语法能够看rufus-scheduler, 估计不少人看了也不太会写本身想要的, 我就举个简单的例子吧:
每5分钟这样写:*/5 * * * *; 每3小时这样写:* */3 * * *.
output的判断语法 能够参考:https://www.elastic.co/guide/...git

if EXPRESSION {
    //...
} else if EXPRESSION {
    //...
} else {
    //...
}

举个例子:github

output {
  if [type] == "article" {
    elasticsearch {
      hosts => ["http://127.0.0.1:9200"]
      index => "article"
      document_id => "%{id}"
      #user => "elastic"
      #password => "changeme"
      #自定义的mapping的文件
      template => "../config/mapping_article.json"
      template_name => "article"
      template_overwrite => true
    }
  } else if [type] == "order" {
    elasticsearch {
      hosts => ["http://127.0.0.1:9200"]
      index => "order"
      document_id => "%{id}"
      #user => "elastic"
      #password => "changeme"
      #自定义的mapping的文件
      template => "../config/mapping_order.json"
      template_name => "order"
      template_overwrite => true
    }
  }
}

templatetemplate_name, template_overwrite 这三个配置是自定义mapping 用的sql

2, 运行Logstash

logstash -f [指定配置文件的路径.conf]json

二, 安全设置(用户认证相关设置)

修改Elasticsearch设置
修改elasticsearch.yml, 添加两个配置项:安全

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

在下面更新license的时候, 请将以上设置为false(也能够不设置为false, 影响可能不大)app

X-PACK设置:
在用下面步骤中的elastic-setup-passwords命令以前, 是须要依赖x-pack模块的, Elastic 6.3.x后面的版本, 就内置了这个模块,这个模块 是收费的, 免费和收费的区别, 网上有破解版, 我暂时用破解版作演示, 请你们仍是使用正版吧. 破解版替换完原版文件后, 须要本身去官网申请一个basic受权的license文件, 这是申请地址. 申请成功后去你刚才填写的邮箱里查收邮件, 点击右键里的 license下载地址, 下载下来这是一个json文件, 修改里面的typeplatinum; 修改expiry_date_in_millis2855980923000. 而后再在KibanaManagementLicense Management的地方上传修改后的License文件.dom

初始化用户及密码
命令:yourpath/elastic/bin/elastic-setup-passwords根据本身的系统找到相应位置
这个命令只有两个参数 autointeractive 一个是自动, 一个是交互, 交互的方式就是能够本身设置密码, 自动的我没用过, 这个命令会设置5个用户的密码:elastic,kibana,logstash_system,beats_system,apm_system_users,其中elastic这个用户的权限最大.

Kibana密码设置
修改kibana.yml文件:

elasticsearch.username: "elastic"
elasticsearch.password: "刚才设置的密码"

在完成以上步骤后, 记得重启ElasticsearchKibana, 在重启Kibana的时候, 会遇到一些warningerror,先无论error,有两个warning须要先解决, 后面的error天然就没有了. 这两个应该是关于xpack.reporting.encryptionKeyxpack.security.encryptionKey的.参考https://www.elastic.co/guide/...https://www.elastic.co/guide/... 仍是修改kibana.yml

xpack.reporting.encryptionKey: "a_random_string"
xpack.security.encryptionKey: "something_at_least_32_characters"

再重启应该就没有error了, 这个时候就能够用以前设置密码的那几个帐号登陆了, 用elastic帐号登陆, 还能够设置其余几个帐号的权限了.

相关文章
相关标签/搜索