適用場景:多個項目或服務,獨立部署,各個服務有自己的 log 文件。爲便於查看、過濾等,可單機部署 ELK 服務後,各個服務通過 filebeat 服務將 log 發送至 ELK 機器。
一、安裝 java
$ sudo yum install java
$ java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment Corretto-11.0.5.10.1 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.5.10.1 (build 11.0.5+10-LTS, mixed mode)
對於 elasticsearch、logstash 和 kibana,Elastic.co 都提供了多種環境的安裝方式,這裏只介紹通過 RPM 的方式,其他環境可參考官網文檔。
二、安裝 elasticsearch
- 下載安裝公鑰。
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
創建文件elasticsearch.repo
並寫入以下內容:[elasticsearch-7.x] name=Elasticsearch 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 基於 java,默認佔用的最小內存是 1G,如果機器內存不夠啓動時會報錯$ sudo yum install elasticsearch $ sudo systemctl daemon-reload $ sudo systemctl enable elasticsearch.service Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service. $ sudo systemctl start elasticsearch.service $ sudo systemctl | grep elasticsearch elasticsearch.service loaded active running Elasticsearch
Not enough space
,將/etc/elasticsearch/jvm.options
中的-Xms
和-Xmx
改小後重試即可。
三、安裝 logstash
- 下載安裝公鑰。如果上面執行過,可跳過。
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
創建文件logstash.repo
並寫入以下內容:[logstash-7.x] 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
- 安裝
$ sudo yum install logstash $ sudo systemctl daemon-reload $ sudo systemctl enable logstash.service Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
- 配置。在
/etc/logstash/conf.d/
創建文件beat2es.conf
,並寫入以下內容:input { beats{ port => 5044 ssl => false } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:[@metadata][timestamp]} %{DATA:message}" } overwrite => [ "message" ] } date { match => [ "[@metadata][timestamp]" , "yyyy-MM-dd HH:mm:ss,SSS" ] } } output { elasticsearch { hosts => ["localhost:9200"] index => "%{[fields][appname]}-%{+YYYY.MM.dd}" sniffing => true } }
- 啓動
$ sudo systemctl start logstash
四、安裝 kibana
- 下載安裝公鑰。如果上面執行過,可跳過。
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
創建文件kibana.repo
並寫入以下內容:[kibana-7.x] name=Kibana 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
- 安裝、啓動
$ sudo yum install kibana $ sudo systemctl daemon-reload $ sudo systemctl enable kibana.service Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service. $ sudo systemctl start kibana.service
至此,ELK 服務已經部署完成。logstash 監聽 5044 端口,所有發送到 5044 端口的內容都會傳送至 elasticsearch,可通過 kibana 可視化搜索頁面進行查詢。
kibana 默認部署在 locaohost:5601,爲了增加安全性,需通過 nginx 爲 kibana 設置用戶登陸訪問。
如果不需要安全性,可修改 /etc/kibana/kibana.yml
文件,將其中的 server.host
的值改爲 0.0.0.0
後重啓 kibana 服務,這樣外網可直接通過該機器的 5601 端口訪問 kibana 服務。
五、設置 kibana 登陸訪問
- 添加 nginx 源
$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 安裝 nginx
$ sudo yum install nginx
- 配置 nginx。修改
/etc/nginx/conf.d/default.conf
中/
路由的配置,如下:location / { auth_basic "secret"; auth_basic_user_file /etc/nginx/db/passwd.db; proxy_pass http://localhost:5601; proxy_set_header Host $host:5601; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; }
- 安裝 httpd
$ sudo yum install httpd
- 設置用戶。用戶名:jack,密碼:123456
$ sudo htpasswd -bc /etc/nginx/pwd.db jack 123456
- 啓動 nginx
$ sudo systemctl nginx.service
至此,訪問該機器的 80 端口,通過用戶密碼驗證,即可訪問到 kibana 服務。
六、安裝 filebeat
filebeat 服務可安裝在任何有 log 文件的機器上,其實時監聽 log 文件,並將內容發送至 logstash 服務。
- 下載 rpm 文件,並安裝
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 22.7M 100 22.7M 0 0 24.8M 0 --:--:-- --:--:-- --:--:-- 24.8M $ sudo rpm -vi filebeat-7.4.2-x86_64.rpm Preparing packages... filebeat-7.4.2-1.x86_64 $ filebeat version filebeat version 7.4.2 (amd64), libbeat 7.4.2 [15075156388b44390301f070960fd8aeac1c9712 built 2019-10-28 19:46:13 +0000 UTC]
- 配置。配置文件按模塊分爲了幾部分,如 Filebeat inputs、Filebeat modules、Outputs等,在這裏只需關心兩個模塊,一是 Filebeat inputs,另個爲 Outputs。
Filebeat inputs 用來配置 Filebeat 服務所監聽、讀取的文件,以及讀取時的一些選項,這裏的文件,即爲 log 文件。
Outputs 用來配置讀取到的內容,如何輸出。配置裏缺省的輸出方向是 Elasticsearch,這裏需要切換爲 Logstash。Logstash 的 SSL 目前尚未開啓,因此只需配置 hosts 即可。* enabled: true 表示開啓 * paths: 指定 log 文件的路徑 * fields: 配置元數據,appname 爲必填項,用來區分不同項目 * multiline.pattern: 正則表達式 * multiline.negate: 是否反向。true 表示匹配 multiline.pattern 時開始新的一行;false 表示不匹配時開始新的一行 * multiline.match: 連接的位置。after 表示不匹配 multiline.pattern 時連在上一句後面;before 表示連在下一句前面 這 3 項用來設置多行識別,'^[0-9]{4}-[0-9]{2}-[0-9]{2}' 是識別,行首格式爲 YYYY-MM-DD 的日期,即每當行首爲該格式的日期時,如 2019-11-15,都會重新開始一行。
如無特殊需求,修改下面內容中的* hosts: ["{host}:5044"],logstash 服務所在的主機地址
paths
和appname
以及hosts
,替換原 filebeat.yml 文件內容,即可。#=========================== Filebeat inputs ============================= filebeat.inputs: - type: log enabled: true paths: - /var/log/app.log fields: appname: {your-app-name} multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after #============================= Filebeat modules =============================== filebeat.config.modules: # Glob pattern for configuration loading path: ${path.config}/modules.d/*.yml # Set to true to enable config reloading reload.enabled: false #==================== Elasticsearch template setting ========================== setup.template.settings: index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false #================================ Outputs ===================================== #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["{host}:5044"] # Optional SSL. By default is off. # List of root certificates for HTTPS server verifications #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] # Certificate for SSL client authentication #ssl.certificate: "/etc/pki/client/cert.pem" # Client Certificate Key #ssl.key: "/etc/pki/client/cert.key" #================================ Processors ===================================== processors: - add_host_metadata: ~ - add_cloud_metadata: ~
- 啓動
$ sudo systemctl enable filebeat.service $ sudo systemctl start filebeat.service