# ELK 節點機器安裝 ## Elasticsearch 安裝流程 ### 安裝 JAVA ``` # yum install java-1.8.0-openjdk ``` * 查看安裝版本 ``` # java -version openjdk version "1.8.0_352" OpenJDK Runtime Environment (build 1.8.0_352-b08) OpenJDK 64-Bit Server VM (build 25.352-b08, mixed mode) ``` ### 導入 Elasticsearch PGP 密鑰 ``` # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch ``` ### 添加 Elasticsearch RPM 存儲庫 ``` # vim /etc/yum.repos.d/elasticsearch.repo [elasticstack] name=Elastic repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md ``` ### 安裝 Elasticsearch ``` # yum install elasticsearch ``` ### 配置 Elasticsearch ``` # vim /etc/elasticsearch/elasticsearch.yml network.host: localhost http.port: 9200 ``` ### 啟動 Elasticsearch ``` # systemctl start elasticsearch # systemctl enable elasticsearch ``` ### 測試 Elasticsearch ``` # curl -X GET "localhost:9200" { "name" : "ip-192-169-0-126.ap-northeast-1.compute.internal", "cluster_name" : "elasticsearch", "cluster_uuid" : "9dLRKd_tTYyDoFJ7luWMkw", "version" : { "number" : "7.17.8", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "120eabe1c8a0cb2ae87cffc109a5b65d213e9df1", "build_date" : "2022-12-02T17:33:09.727072865Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } ``` ## Kibana 安裝流程 ### 安裝 Kibana ``` # yum install kibana ``` ### 配置 Kibana ``` # vim /etc/kibana/kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9200"] ``` ### 啟動 Kibana ``` # systemctl start kibana # systemctl enable kibana ``` ### 連線至 Web 介面 * http://<`IP`>:5601 ## Logstash 安裝流程 ### 安裝 Logstash * 所有自定義配置文件存儲在 `/etc/logstash/conf.d/` 目錄中 ``` # yum install logstash ``` ### 啟動 Logstash ``` # systemctl start logstash # systemctl enable logstash ``` ## Filebeat 安裝流程 ### 安裝 Filebeat * 確認 Kibana 服務已啟動 ``` # yum install filebeat ``` ### 添加系統模塊 * 用來檢查本地系統日誌 ``` # filebeat modules enable system Enabled system ``` ### 運行安裝程序 ``` # filebeat setup Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/machine-learning/current/index.html It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat. Loaded machine learning job configurations Loaded Ingest pipelines ``` ### 啟動服務 ``` # systemctl start filebeat # systemctl enable filebeat ``` ### 查看 Log 數據 * 默認 Filebeat : 將文件直接記錄到 Elasticsearch 中 * 自定義 Filebeat: 要編輯 `/etc/filebeat/filebeat.yml` 配置文件 ``` filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/web_access.log json.keys_under_root: true json.overwrite_keys: true setup.kibana: host: "http://192.169.0.101:5601" output.elasticsearch: hosts: ["http://192.169.0.101:5601"] index: "EVA-TEST-%{+yyyy-MM-dd}" username: "elastic" password: "XXXXXXXXXXXX" setup.template.name: "EVA-TEST" setup.template.pattern: "EVA-TEST-*" setup.template.enabled: false setup.template.overwrite: true setup.ilm.enabled: false timeout: 2s ``` ## Elasticsearch 的登入驗證 ### 關閉服務 ``` # systemctl stop elasticsearch # systemctl stop kibana ``` ### 修改 Elasticsearch 配置檔 ``` # vim /etc/elasticsearch/elasticsearch.yml xpack.security.enabled: true xpack.security.transport.ssl.enabled: true ``` ### 產 CA 憑證 * Certificate : 只要是用同張 CA 憑證就可以加入 * 要修改 `elastic-certificates.p12` 檔案權限,不然重啟服務會失敗 ``` # cd /usr/share/elasticsearch/ # ./bin/elasticsearch-certutil ca Please enter the desired output file [elastic-stack-ca.p12]: <Enter> Enter password for elastic-stack-ca.p12 : <Enter> # ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #產生私鑰 Enter password for CA (elastic-stack-ca.p12) : <Enter> Please enter the desired output file [elastic-certificates.p12]: <Enter> Enter password for elastic-certificates.p12 : <Enter> # cp /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch # chmod 644 /etc/elasticsearch/elastic-certificates.p12 ``` ### 產生系統使用的帳號與密碼 * 重要 : 密碼要好好保存 * interactive : 手動設定 * auto : 自動設定 ``` # systemctl start elasticsearch # ./bin/elasticsearch-setup-passwords interactive / auto Please confirm that you would like to continue [y/N] y Changed password for user apm_system PASSWORD apm_system = XXXXXXXXXXXX Changed password for user kibana_system PASSWORD kibana_system = XXXXXXXXXXXX Changed password for user kibana PASSWORD kibana = XXXXXXXXXXXX Changed password for user logstash_system PASSWORD logstash_system = XXXXXXXXXXXX Changed password for user beats_system PASSWORD beats_system = XXXXXXXXXXXX Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = XXXXXXXXXXXX Changed password for user elastic PASSWORD elastic = XXXXXXXXXXXX ``` ### 修改 Elasticsearch 配置檔 ``` # vim /etc/elasticsearch/elasticsearch.yml # 啟動 Elasticsearch 安全功能 xpack.security.enabled: true # 加密配置 xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 ``` * 如果之前節點證書設置了密碼,將密碼添加到 keystore ``` # ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password # ./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password ``` ### 修改 Kibana 配置檔 ``` # vim /etc/kibana/kibana.yml xpack.security.enabled: true elasticsearch.username: "elastic" elasticsearch.password: "XXXXXXXXXXXX" ``` ### 重新啟動服務 ``` # systemctl restart elasticsearch # systemctl restart kibana ``` ## 在 Elasticsearch 和 Kibana 中使用 HTTPS ### 生成加密 HTTPS 的證書 ``` # cd /usr/share/elasticsearch # ./bin/elasticsearch-certutil http Generate a CSR? [y/N] n Use an existing CA? [y/N] y CA Path: /usr/share/elasticsearch/elastic-stack-ca.p12 Password for elastic-stack-ca.p12: <ENTER> For how long should your certificate be valid? [5y] <ENTER> Generate a certificate per node? [y/N] n ## When you are done, press <ENTER> once more to move on to the next step. Is this correct [Y/n] y ## When you are done, press <ENTER> once more to move on to the next step. Is this correct [Y/n]y Key Name: elasticsearch Subject DN: CN=elasticsearch Key Size: 2048 Do you wish to change any of these options? [y/N] n ## What password do you want for your private key(s)? Provide a password for the "http.p12" file: [<ENTER> for none] <ENTER> ## Where should we save the generated files? What filename should be used for the output zip file? [/usr/share/elasticsearch/elasticsearch-ssl-http.zip] /usr/share/elasticsearch/elasticsearch-ssl-http.zip Zip file written to /usr/share/elasticsearch/elasticsearch-ssl-http.zip ``` ### 解壓縮 `elasticsearch-ssl-http.zip` 文件 ``` # unzip elasticsearch-ssl-http.zip Archive: elasticsearch-ssl-http.zip creating: elasticsearch/ inflating: elasticsearch/README.txt inflating: elasticsearch/http.p12 inflating: elasticsearch/sample-elasticsearch.yml creating: kibana/ inflating: kibana/README.txt inflating: kibana/elasticsearch-ca.pem inflating: kibana/sample-kibana.yml # cp /usr/share/elasticsearch/elasticsearch/http.p12 /etc/elasticsearch/ # cp /usr/share/elasticsearch/kibana/elasticsearch-ca.pem /etc/kibana/ ``` ### 修改 Elasticsearch 配置檔 ``` # vim /etc/elasticsearch/elasticsearch.yml # 啟動Elasticsearch安全功能 xpack.security.enabled: true # 節點加密配置 xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 # HTTP加密配置 xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: http.p12 ``` ### 修改 Kibana 配置檔 ``` # vim /etc/kibana/kibana.yml elasticsearch.ssl.certificateAuthorities: /etc/kibana/elasticsearch-ca.pem ``` ### 重新啟動服務 ``` # systemctl restart kibana ``` ### 連線至 Web 介面 * https://<`IP`>:5601 ![](https://i.imgur.com/lAvjSsV.png)