ELK(Elasticsearch,Logstash,Kibana) 搭建 同步 MySQL 及 用户权限安全设置
本文章用的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 } } }
template
和 template_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文件, 修改里面的type
为platinum
; 修改expiry_date_in_millis
为2855980923000
. 然后再在Kibana
的Management
的License Management
的地方上传修改后的license
文件.
初始化用户及密码
命令:yourpath/elastic/bin/elastic-setup-passwords
根据自己的系统找到相应位置
这个命令只有两个参数 auto
和 interactive
一个是自动, 一个是交互, 交互的方式就是可以自己设置密码, 自动的我没用过, 这个命令会设置5个用户的密码:elastic
,Kibana
,logstash_system
,beats_system
,apm_system_users
,其中elastic
这个用户的权限最大.
Kibana密码设置
修改kibana.yml
文件:
elasticsearch.username: "elastic" elasticsearch.password: "刚才设置的密码"
在完成以上步骤后, 记得重启Elasticsearch
和Kibana
, 在重启Kibana
的时候, 会遇到一些warning
和error
,先不管error
,有两个warning
需要先解决, 后面的error
自然就没有了. 这两个应该是关于xpack.reporting.encryptionKey
和xpack.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
账号登录, 还可以设置其他几个账号的权限了.