Elasticsearch + Logstash + Kibana 安裝(全)

Elasticsearch + Logstash + Kibana 安裝(全)

每一個成功人士的背後,必定曾經做出過勇敢而又孤獨的決定。

放棄不難,但堅持很酷~

一、ELK 是什麼?

ELK = Elasticsearch + Logstash + Kibana

  • Elasticsearch:後臺分佈式存儲以及全文檢索。

  • Logstash: 數據導入導出的工具。

  • Kibana:數據可視化展示界面。

ELK架構為數據分佈式存儲、可視化查詢和日誌解析創建了一個功能強大的管理鏈。三者相互配合,取長補短,共同完成分佈式大數據處理工作。

注意: ELK技術棧有 version check,軟件大版本號需要一致,本文以 6.4.0 版本為例。

二、Elasticsearch

2.1、下載 Elasticsearch 源碼

<code>mkdir /usr/local/elk/es1
wget https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-4-0
/<code>

2.2、創建 es 用戶

<code>useradd es
/<code>

2.3、解壓源碼並修改其所有者

<code>tar zxvf elasticsearch-6.4.0.tar.gz 
chown -R es:es elasticsearch-6.4.0
/<code>

2.4、修改 Elasticsearch 的配置文件

修改Elasticsearch的配置文件:/usr/local/elk/elasticsearch-6.4.0/config/elasticsearch.yml

<code>cluster.name: elasticsearch  


node.name: es-1

path.data: /data/elasticsearch/es1/data

bootstrap.memory_lock: true

network.host: 192.168.167.205

http.port: 9200

transport.tcp.port: 9300

discovery.zen.ping.unicast.hosts: ["node205.data:9300","node205.data:9301","node205.data:9302"]

discovery.zen.minimum_master_nodes: 2

gateway.recover_after_nodes: 1

action.destructive_requires_name: true
/<code>

2.5、後臺啟動 Elasticsearch

Elasticsearch 不能以 root 用戶啟動,所以改用 es 用戶啟動。

<code>su – es
cd /usr/local/elk/es/es1/elasticsearch-6.4.0
./bin/elasticsearch –d
/<code>

可根據 logs/elasticsearch.log 文件來監測 Elasticsearch 服務運行狀況。

注意:如果Elasticsearch服務啟動失敗,可參考 第五章 FAQ 處理問題。

2.6、停止Elasticsearch

根據 Elasticsearch 的端口號來停止該服務:

<code>netstat -ntlp | grep 9200 | awk '{print $7}' | awk -F '/' '{print $1}' | xargs kill -9 
/<code>

三、Logstash

Logstash 是開源的服務器端數據處理管道,能夠同時 從多個來源採集數據、轉換數據,然後將數據發送到您最喜歡的 “存儲庫” 中。logstash收集日誌基本流程為:

Input –> filter –> output

1.1、下載Logstash源碼

<code>cd /usr/local/elk 
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz
/<code>

1.2、創建 es 用戶(如已創建,請略過該步驟)

<code>useradd es 
/<code>

1.3、解壓源碼並修改其所有者

<code>tar zxvf logstash-6.4.0.tar.gz 
chown -R es:es logstash-6.4.0
/<code>

1.4、示例:將mysql表數據導入到Elasticsearch

1.4.1、創建配置文件

<code>su - es
cp -r config/logstash-sample.conf config/face.conf
/<code>

修改 face.conf 配置文件如下所示:

<code>#Sample Logstash configuration for creating a simple
#Beats -> Logstash -> Elasticsearch pipeline.

input {
jdbc{
jdbc_connection_string => "jdbc:mysql://192.168.167.204:3316/db0?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&tinyInt1isBit=false"
jdbc_user => "mycat"
jdbc_password => "mycat123"
jdbc_driver_library => "/usr/local/mysql-connector-java-5.1.46.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
jdbc_default_timezone =>"Asia/Shanghai"
statement_filepath => "./sql/face.sql"
schedule => "* * * * *"
# type => "mycat"

# 是否記錄上次執行結果, 如果為真,將會把上次執行到的 tracking_column 字段的值記錄下來,保存到 last_run_metadata_path 指定的文件中
record_last_run => true
# 是否需要記錄某個column 的值,如果record_last_run為真,可以自定義我們需要 track 的 column 名稱,此時該參數就要為 true. 否則默認 track 的是 timestamp 的值.
use_column_value => true
# 如果 use_column_value 為真,需配置此參數. track 的數據庫 column 名,該 column 必須是遞增的. 一般是mysql主鍵
tracking_column => "id"
tracking_column_type => "numeric"
last_run_metadata_path => "./face_last_id"
lowercase_column_names => false
}
}

filter {
if [sex] == 1 {
mutate {
add_field => { "tags" => "男"}
}
}
if [sex] == 2 {
mutate {
add_field => { "tags" => "女"}
}
}
if [sex] == 0 {
mutate {
add_field => { "tags" => "未知"}
}
}
}

output {
elasticsearch {
hosts => ["http://192.168.167.205:9200"]

#index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
index => "face_card"
document_id => "%{id}"
#user => "elastic"
#password => "changeme"
}
stdout {
codec => json_lines
}
}
/<code>

1.4.2、添加 sql 文件

創建 face.sql 文件

<code>su - es
mkdir sql
touch face.sql
/<code>

修改 face.sql 文件內容如下所示

<code>select * from face_card where id > :sql_last_value order by id limit 1000
/<code>

1.4.3、創建索引

打開 postman,執行 PUT 請求來創建 Elasticsearch 索引,索引名稱為 face_card ,指定分片數為 5 ,副本數為 2 :

<code>PUT http://192.168.167.205:9200/face_card

{

"settings": {

"number_of_shards": 5,


"number_of_replicas": 2

}

}
/<code>

1.4.4、執行導數程序

<code>su - es
cd /usr/local/elk/logstash-6.4.0
./bin/logstash -f ./config/face.conf
/<code>

1.4.5、查詢索引內容

使用postman工具,執行GET請求來查看索引內容:

<code>GET /face_card/_search
/<code>

返回示例如下圖所示:

Elasticsearch + Logstash + Kibana 安装(全)

四、Kibana

4.1、下載 Kibana 源碼

<code>cd /usr/local/elk 
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz
/<code>

4.2、創建 es 用戶(如已創建,請略過該步驟)

<code>useradd es 
/<code>

4.3、解壓源碼並修改其所有者

<code>tar zxvf kibana-6.4.0-linux-x86_64.tar.gz 
chown -R es:es kibana-6.4.0-linux-x86_64
/<code>

4.4、修改kibana.yml配置文件

修改Kibana配置:config/kibana.yml

<code>server.port: 5601 

server.host: "node205.data"

elasticsearch.url: "http://node205.data:9200"

logging.dest: /usr/local/elk/kibana-6.4.0-linux-x86_64/logs/kibana.log
/<code>

4.5、後臺啟動Kibana

用es用戶後臺啟動Kibana

<code>su - es
cd /usr/local/elk/kibana-6.4.0-linux-x86_64
nohup ./bin/kibana > /dev/ 2>&1 &
/<code>

可根據 logs/kibana.log 文件來監測Kibana服務運行狀況。

五、FAQ

5.1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

修改 /etc/security/limits.conf 文件,增加配置,來改變用戶 es 每個進程最大同時打開文件數的大小:

<code>es soft nofile 65535  

es hard nofile 65537
/<code>

可切換到es用戶下,然後通過下面2個命令查看當前數量:

  • ulimit -Hn

  • ulimit -Sn

注意:用戶退出重新登錄後配置才會刷新生效。

1.2. max number of threads [3818] for user [es] is too low, increase to at least [4096]

最大線程個數太低。修改配置文件 /etc/security/limits.conf ,增加配置:

<code>es - nproc 4096 
# 或者
es soft nproc 4096
es hard nproc 4096
/<code>

可切換到es用戶下,然後通過下面2個命令查看當前最大線程數:

  • ulimit -Hu

  • ulimit –Su

注意:用戶退出重新登錄後配置才會刷新生效。

1.3. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

修改 /etc/sysctl.conf 文件,在文末增加配置

<code>vm.max_map_count=262144
/<code>

執行命令<code>sysctl -p/<code>生效。

1.4. memory locking requested for elasticsearch process but memory is not locked

修改 /etc/security/limits.conf 文件,增加配置:

<code>* soft memlock unlimited 
* hard memlock unlimited
/<code>

1.5. 啟動Elasticsearch服務,顯示被killed

可能Elasticsearch所在的機器內存不足。

修改 bin/elasticsearch 文件,將 ES_JAVA_OPTS 修改為:<code>ES_JAVA_OPTS="-Xms1g -Xmx1g"/<code>,如下圖所示:

Elasticsearch + Logstash + Kibana 安装(全)

1.6. 服務啟動後,在瀏覽器訪問不了9200端口

關閉防火牆:

<code>systemctl stop firewalld
/<code>

歡迎大家留言討論

Elasticsearch + Logstash + Kibana 安裝(全)


分享到:


相關文章: