1. 程式人生 > 其它 >[喵咪BELK實戰(2)] elasticsearch+kibana搭建

[喵咪BELK實戰(2)] elasticsearch+kibana搭建

[喵咪BELK實戰(2)] elasticsearch+kibana搭建

前言

上一節我們介紹了日誌系統和BELK之後就要到激動人心的安裝環境了,實踐出真知都知道日誌系統很重要只有把它搭建起來才有效果,那我們今天就來一同搭建 BELK 日誌系統中的elasticsearch+kibana來進行實時的索引線上檢視功能

附上:

喵了個咪的部落格:w-blog.cn

官網地址:https://www.elastic.co/cn/

1. 準備工作

BELK下載地址

筆者這裡的機器系統是centos6.8,使用BELK需要安裝jdk1.8以上(主要是elasticsearch依賴)

jdk1.8可以通過官網下載: Java SE Development Kit 8 - Downloads

tar -zxvf jdk-8u101-linux-x64.tar.gz
mv jdk1.8.0_101/ /usr/local/jdk1.8
# 設定環境變數
vim /etc/profile
# 加入如下內容
# java
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
# 使得環境變數生效
source /etc/profile
# 列印java版本號
java -version
# 看到如下輸出java環境安裝完成
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

使用Supervisor進行程式常駐安裝可以參考筆者博文: 喵咪Liunx(1)計劃任務佇列指令碼後臺程序Supervisor幫你搞定 - 文振熙的個人空間

2. elasticsearch

elasticsearch是強大的索引程式,支援大量的資料索引查詢,使用JAVA編寫,缺點是太吃資源(CPU,記憶體)

2.1 安裝

首先我們安裝配置elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
tar -zxvf elasticsearch-5.3.0.tar.gz
mv elasticsearch-5.3.0 /usr/local/

此時就可以啟動elasticsearch了使用**/usr/local/elasticsearch-5.3.0/bin/elasticsearch** 就可以執行但是會得到如下異常:

[2017-04-27T15:12:06,495][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

主要原因是不能使用root使用者來執行elasticsearch, elasticsearch在默寫情況下可以直接對伺服器執行指令碼,出於安全性老老實實建立一個使用者:

groupadd esgroup
useradd esuser -g esgroup -p espassword
# 吧elasticsearch目錄的許可權賦予esuser
chown -R esuser:esgroup /usr/local/elasticsearch-5.3.0/
# 切換使用者執行
su esuser

看到如下資料表明elasticsearch可以正常執行:

[2017-04-27T15:15:12,291][INFO ][o.e.c.s.ClusterService   ] [q-flXxl] new_master {q-flXxl}{q-flXxldTxWSCTqQn-Rjjg}{dXOgMmGISWyP5UB-_VPpjQ}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2017-04-27T15:15:12,312][INFO ][o.e.h.n.Netty4HttpServerTransport] [q-flXxl] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}
[2017-04-27T15:15:12,315][INFO ][o.e.n.Node               ] [q-flXxl] started

可以通過url呼叫的方式驗證服務是否可用

curl localhost:9200
# 會有如下輸出
{
  "name" : "q-flXxl",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "vVx27KRfTR64Wc1NCwBO_Q",
  "version" : {
    "number" : "5.3.0",
    "build_hash" : "3adb13b",
    "build_date" : "2017-03-23T03:31:50.652Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

2.2 警告解決

如果在輸出started之前還有一些[WARN]可以一一解決掉:

1.此警告是對於最大檔案開啟數量過少導致的

[2017-04-27T15:15:09,246][WARN ][o.e.b.BootstrapChecks    ] [q-flXxl] max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

vi /etc/security/limits.conf 
# 新增或修改如下內容:
* soft nofile 65536
* hard nofile 65536

2.此警告是對於最大虛擬記憶體過少導致的

[2017-04-27T15:15:09,246][WARN ][o.e.b.BootstrapChecks    ] [q-flXxl] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

vi /etc/sysctl.conf 
# 新增下面配置:
vm.max_map_count=262144
# 執行
sysctl -p

3.在阿里雲伺服器上可能出現

[2017-04-27T15:15:09,246][WARN ][o.e.b.BootstrapChecks    ] [q-flXxl] system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

# 編輯配置檔案
vim /usr/local/elasticsearch-5.3.0/config/elasticsearch.yml
bootstrap.system_call_filter: false

2.3 配置檔案

在配置檔案中有一些關鍵配置,編輯檔案/usr/local/elasticsearch-5.3.0/config/elasticsearch.yml

# 服務監聽IP地址
network.host: localhost                                                                                                                                                                                 
# 服務監聽埠
http.port: 9200
            
# 索引檔案和日誌檔案儲存地址預設是在安裝目錄                                                                                                                 
path.data: /data/elasticsearch/data                                                                                                                                                                                                                              
path.logs: /data/elasticsearch/logs  

注意:elasticsearch沒有安全控制一定要限制內網才能使用,有elasticsearch被劫持勒索的事件

2.4 使用Supervisor執行

使用Supervisor常駐啟動修改配置檔案加入如下語句在重啟Supervisor就可以在後臺執行

[program:elasticsearch]
;你需要執行的語句
command=/usr/local/elasticsearch-5.3.0/bin/elasticsearch
;是否自動啟動
autostart=true
autorestart=true
;執行程式的使用者
user=esuser

3 kibana

kibana是一個使用elasticsearch 作為資料來源的 UI視覺化 查詢工具

3.1 安裝

kibana 安裝就相對簡單了很多

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz
tar -zxvf kibana-5.3.0-linux-x86_64.tar.gz
mv kibana-5.3.0-linux-x86_64 /usr/local/kibana-5.3.0

預設kibana只能使用localhost進行訪問,需要修改配置檔案來允許外網訪問

vim /usr/local/kibana-5.3.0/config/kibana.yml

# 服務監聽埠預設5601
server.port: 5601                                                                                          
# 服務監聽IP段
server.host: "外網地址"   
# 需要連線到elasticsearch的地址
elasticsearch.url: "http://localhost:9009"     

然後使用外網地址就可以訪問了

但是現在elasticsearch還沒有資料所以也沒有辦法檢視檢索

3.2 對kibana進行許可權控制

細心的大家已經發現了登入kibana居然沒有任何的限制.... 那麼要怎麼辦呢? 這邊筆者建議使用nginx來進行許可權驗證 (Nginx安裝細節就不列舉出來了)

yum install httpd
# 建立使用者需要輸入密碼
htpasswd -c /usr/local/nginx/passwd.db kibanauser
chmod 400 /usr/local/nginx/passwd.db
chown -R www:www /usr/local/nginx/passwd.db

需要讓kibana配置檔案改回到localhost限制外網訪問之後在nginx加入如下配置:

server {
  listen       8081;
  server_name _;
  location / {
     auth_basic "secret";
     auth_basic_user_file /usr/local/nginx/passwd.db;
     proxy_pass http://localhost:5601;
  }
}

然後重啟nginx之後會發現老的5601無法訪問了,訪問8081埠會出現如下介面:

輸入之前配置好的使用者名稱密碼即可正常使用

3.3 使用Supervisor執行

使用Supervisor常駐啟動修改配置檔案加入如下語句在重啟Supervisor就可以在後臺執行

[program:kibana]
;你需要執行的語句
command=/usr/local/kibana-5.3.0/bin/kibana
;是否自動啟動
autostart=true
autorestart=true
;執行程式的使用者
user=root

4.建立測試資料

雖然還沒有logstash + filebeat來幫助採集資料但是我們可以先手動向elasticsearch中建立索引然後使用 kibana 進行檢視,先來了解一下elasticsearch常用API

# 檢視叢集狀態
curl 'localhost:9200/_cat/health?v'
# 檢視所有索引列表
curl 'localhost:9200/_cat/indices?v'
# 建立索引
curl -XPUT 'localhost:9200/索引名稱?pretty'
# 插入索引
curl -XPUT 'localhost:9200/索引名稱/TYPE名稱/ID名稱?pretty' -d '訊息體必須是JSON'
# 檢視索引
curl -XGET 'localhost:9200/索引名稱/TYPE名稱/ID名稱?pretty'
# 刪除縮影
curl -XDELETE 'localhost:9200/索引名稱?pretty'

我們試著建立一個索引並且寫入一條資料:

curl -XPUT 'localhost:9200/test-log-2017-4-28?pretty'
curl -XPUT 'localhost:9200/test-log-2017-4-28/log/1?pretty' -d '{"msg":"這是一條測試log"}'

然後在kibana中就可以查看了

總結

本節我們優先安裝並且比較完整的配置了elasticsearch+kibana 這樣一個索引和查詢系統,並且也瞭解了elasticsearch基本的使用方式,下一節將會結合日誌採集系統logstash + filebeat進行日誌採集傳輸到elasticsearch 讓 kibana 可以進行檢視,那麼今天的博文就到這裡我們下次再見...

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!