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

javashixisheng 2019-06-30

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

一, 准备

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

二, Logstash与MySQL同步

1, Logstash的配置

input的配置 可以参考:https://www.elastic.co/guide/...

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/...

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

举个例子:

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 用的

2, 运行Logstash

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

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

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

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

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

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

初始化用户及密码
命令: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账号登录, 还可以设置其他几个账号的权限了.

相关推荐