分佈式ELK平臺

什麼是ELK

  • ELK是一整套解決方案,是三個軟件產品的首字母縮寫
  • ELK分別代表
    • Elasticsearch:負責日誌檢索和儲存
    • Logstash:負責日誌的收集和分析、處理
    • Kibana:負責日誌的可視化
  • 這三款軟件都是開源軟件,通常是配合使用,而且又先後歸於Elastic.co公司名下,故被簡稱爲ELK

ELK的作用

ELK組件在海量日誌系統的運維中,可用於解決

  • 分佈式日誌數據集中式查詢和管理
  • 系統監控,包含系統硬件和應用各個組件的監控
  • 故障排查
  • 安全信息和事件管理
  • 報表功能

Elasticsearch

  • ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful API的Web接口
  • Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速。安裝使用方便

主要特點

  • 實時分析
  • 分佈式實時文件存儲,並將每一個字段都編入索引
  • 文檔導向:所有的對象全部是文檔
  • 高可用性,易擴展,支持集羣( Cluster)、分片和複製( Shards和 Replicas)
  • 接口友好,支持JSON
  • Elasticsearch沒有典型意義的事務
  • Elasticsearch是一種面向文檔的數據庫
  • Elasticsearch沒有提供授權和認證特性

相關概念

它是一種非關係型數據庫

  • Node:裝有一個ES服務器的節點
  • Cluster:有多個Node組成的集羣
  • Document:一個可被搜索的基礎信息單元
  • Index:擁有相似特徵的文檔的集合
  • Type:一個索引中可以定義一種或多種類型
  • Filed:是ES的最小單位,相當於數據的某一列
  • Shards:索引的分片,每一個分片就是一個 Shard
  • Replicas:索引的拷貝

ES集羣安裝

  • 所需軟件包
elasticsearch-2.3.4.rpm    
kibana-4.5.2-1.x86_64.rpm
filebeat-1.2.3-x86_64.rpm  
logstash-2.3.4-1.noarch.rpm
[root@yum ~] 上傳文件到yum源
[root@yum ~] createrepo --update /var/ftp/localrepo   #更新yum源
  • 集羣架構
主機名 IP 作用
es1 192.168.1.51 分佈式數據庫
es2 192.168.1.52 分佈式數據庫
es3 192.168.1.53 分佈式數據庫
es4 192.168.1.54 分佈式數據庫
es5 192.168.1.55 分佈式數據庫
kibana 192.168.1.56 日誌可視化
logstash 192.168.1.57 收集分析,處理日誌
yum 192.168.1.252 提供yum源

1)安裝方法

  • 設置主機名解析
  • 解決依賴關係,安裝軟件包
  • 修改配置文件
  • 啓動服務
  • 檢查服務
[root@es1 ~] vim /etc/hosts
192.168.1.51 es1
[root@es1 ~] yum -y install java-1.8.0-openjdk
[root@es1 ~] yum -y install elasticsearch
[root@es1 ~] vim /etc/elasticsearch/elsticsearch.yml
 54 network.host: 0.0.0.0
[root@es1 ~] systemctl start elasticsearch
[root@es1 ~] systemctl enable elasticsearch
[root@es1 ~] ss -lntup
[root@es1 ~] curl 192.168.1.51:9200
{
  "name" : "es1",
  "cluster_name" : "elk",
  "version" : {
    "number" : "2.3.4",
    "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",
    "build_timestamp" : "2016-06-30T11:24:31Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}

2)使用ansible部署集羣

] vim /etc/elasticsearch/elasticsearch.yml
 17 cluster.name: elk	#集羣名稱,需要所有服務器相同
 23 node.name: {{ ansible_hostname }}  
 # playbook中使用template模塊的寫法,作用是調取主機名,需要與/etc/hosts文件中對應
 54 network.host: 0.0.0.0
 68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3", "es4", "es5"]  #表明集羣中的主機
  • 集羣中的所有節點要相互能夠ping通,要在所有集羣
  • 機器上配置/etc/hosts中的主機名與ip對應關係
  • 集羣中所有機器都要安裝Java環境
  • clustername集羣名稱配置要求完全一致
  • node.name爲當前節點標識,應配置本機的主機名
  • discovery爲集羣節點機器,不需要全部配置
  • 配置完成以後啓動所有節點服務

驗證:

curl 192.168.1.51:9200/_cluster/health?pretty
{
  "cluster_name" : "nsd1910",
  "status" : "green",	#集羣狀態,green爲正常,yellow爲存在問題,red爲完全故障
  "timed_out" : false,
  "number_of_nodes" : 5,	#集羣節點數量
  "number_of_data_nodes" : 5,	#集羣數據節點數量
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

ES插件的使用

1)常用插件

head插件

  • 它展現ES集羣的拓撲結構,並且可以通過它來進行索引(Index)和節點(Node)級別的操作
  • 它提供一組針對集羣的查詢API,並將結果以json和表格形式返回
  • 它提供一些快捷菜單,用以展現集羣的各種狀態

kopf插件

  • 是一個 ElasticSearch的管理工具
  • 它提供了對ES集羣操作的API

bigdesk插件

  • 是elasticsearch的一個集羣監控工具
  • 可以通過它來查看es集羣的各種狀態,如:cpu、內存使用情況,索引數據、搜索情況 , http連接數等

2)ES插件安裝、查看

在集羣的一個節點上安裝即可

[root@es5 ~] ln -s /usr/share/elasticsearch/bin/plugin /usr/local/bin/   #爲命令創建軟連接
[root@es5 ~] plugin install 插件文件URL地址	#安裝插件
[root@es5 ~] plugin list   #查看已安裝插件
[root@es5 ~] plugin remove 插件名  #移除插件

在yum服務器上部署ftp以提供插件

[root@yum ~] ls /var/ftp/elk/    #提供ftp服務
elasticsearch-head-master.zip  bigdesk-master.zip
elasticsearch-kopf-master.zip

安裝插件:

[root@es5 ~] plugin install ftp://192.168.1.252/elk/elasticsearch-kopf-master.zip
[root@es5 ~] plugin install ftp://192.168.1.252/elk/bigdesk-master.zip
[root@es5 ~] plugin install ftp://192.168.1.252/elk/elasticsearch-head-master.zip

#################################################
當插件文件在本地時:
[root@es5 ~] plugin file:///root/bigdesk-master.zip   #URL地址
  • 安裝插件時,必須指定插件的URL地址

3)使用插件

使用瀏覽器訪問:(沒有公網ip,就搭建proxy或者使用彈性負載均衡)

http://192.168.1.55:9200/_plugin/head
http://192.168.1.55:9200/_plugin/kopf
http://192.168.1.55:9200/_plugin/bigdesk

4)擴展插件RESTful API

http協議簡介

  • http請求由三部分組成:
    分別是:請求行、消息報頭、請求正文
  • 請求行以一個方法符號開頭,以空格分開,後面跟着 請求的∪R和協議版本,格式如下:
    Method Request-uri HTTP-Version Crlf
  • http請求方法
    • 常用方法GET,POST,HEAD
    • 其他方法OPTIONS,PUT, DELETE, TRACE和 CONNECT
  • ES常用
    • PUT 增
    • DELETE 刪
    • POST 改
    • GET 查

curl介紹:

  • 在linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持多種請求模式,自定義請求頭等強大功能,是一款綜合工具
  • 常用參數:
    • -A:修改請求Agent
    • -X:指定請求方法
    • -i:顯示返回頭信息

RESTful API調用

Elasticsearch提供了一系列RESTful的API

  • 檢查集羣、節點、索引的健康度、狀態和統計
  • 管理集羣、節點、索引的數據及元數據
  • 對索引進行CRUD操作及查詢操作
  • 執行其他高級操作如分頁、排序、過濾等

POST或PUT數據使用json格式

curl 192.168.1.52:9200/_cat/
curl 192.168.1.52:9200/_cat/health?v
curl 192.168.1.52:9200/_cat/master 	#查看master節點
curl 192.168.1.52:9200/_cat/master?v 	#?v:顯示詳細信息
curl 192.168.1.52:9200/_cat/master?help 	#?help:查看幫助信息
curl 192.168.1.52:9200/_cat/nodes	#查看節點
curl 192.168.1.52:9200/_cat/indices	 	#查看索引
curl 192.168.1.52:9200/_cat/shards		#查看分片

1.增PUT:

curl -X PUT 192.168.1.52:9200/school -d '   
> {"settings": {
>   "index": {
>     "number_of_shards": 5,  
>     "number_of_replicas": 1
>   }
> }
> }'
# 新建索引,名稱爲school,分片數量爲5,副本數量爲1
  • 調用方式:數據庫地址/索引/類型/id
curl -X PUT http://192.168.1.51:9200/school/teacher/1 -d '   
{
  "姓名": "dc",
  "愛好": "燙頭",
  "階段": "1.0"
}'
# 在school'索引'下新增數據,teacher爲'類型',1爲'id'

2.改POST

  • 修改數據必須調用_update關鍵字
  • 調用方式:數據庫地址/索引/類型/id/_update
curl -X POST http://192.168.1.52:9200/school/teacher/1/_update -d '
{"doc":{"愛好": "擼貓"}}'
# doc爲固定格式

3.查GET

  • 多條查詢需要使用_mget關鍵字配合json調用
curl -X GET http://192.168.1.53:9200/school/teacher/1?pretty  
# GET可以省略,默認爲GET方式,?pretty爲以規範的方式輸出

4.刪DELETE

  • 可以刪除文檔,可以刪除索引,但是不能刪除類型
curl -X DELETE http://192.168.1.53:9200/school/teacher/1
curl -X DELETE http://192.168.1.53:9200/school   #刪除索引
curl -X DELETE http://192.168.1.53:9200/*   #刪除所有

導入數據:

  • 調用_bulk批量導入數據
  • 方式爲POST,數據格式爲json,url編碼使用data-binary

導入含有index配置的json文件:

gzip -d log.jsonl.gz
curl -X POST 192.168.1.51:9200/_bulk --data-binary @logs.jsonl

Kibana

1)什麼是kibana

  • 數據可視化平臺工具
  • 特點:
    1. 靈活的分析和可視化平臺
    2. 實時總結流量和數據的圖表
    3. 爲不同的用戶顯示直觀的界面
    4. 即時分享和嵌入的儀表板

2)安裝Kibana

配置好yum源,直接安裝:

[root@kibana ~] yum -y install kibana
[root@kibana ~] vim /opt/kibana/config/kibana.yml   #配置文件,只修改第15行,其他行去掉註釋就行
  2 server.port: 5601		#監聽端口
  5 server.host: "0.0.0.0"		#監聽地址,0.0.0.0表示所有
 15 elasticsearch.url: "http://192.168.1.51:9200"   #指定es集羣的ip,任意一臺都行
 23 kibana.index: ".kibana"
 26 kibana.defaultAppId: "discover"		#默認首頁
 53 elasticsearch.pingTimeout: 1500		#ping超時時間
 57 elasticsearch.requestTimeout: 30000		#請求超時時間
 64 elasticsearch.startupTimeout: 5000		#啓動超時時間
[root@kibana ~] systemctl start kibana
[root@kibana ~] systemclt enable kibana
[root@kibana ~] ss -lntup | grep 5601

啓動kibana後訪問es集羣的head插件頁面:http://192.168.1.55:9200/_plugin/head,如果存在名爲.kibana的索引,表明kibana與es集羣連接成功

3)kibana使用

瀏覽器訪問http://192.168.1.56:5601
查看status頁面,全綠說明配置正常

  • 初始化
    在這裏插入圖片描述
  • 查看數據
    在這裏插入圖片描述
  • 數據展示方式
    在這裏插入圖片描述
  • 創建餅圖

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
最後在儀表盤dashboard中添加創建的圖表,即
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章