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帳號登陸, 還能夠設置其餘幾個帳號的權限了.

相關文章
相關標籤/搜索