什麼是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部署集羣
- 實驗時使用的playbook
- 集羣在部署時需要額外修改配置文件,其餘步驟與上述方法相同
] 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
- 數據可視化平臺工具
- 特點:
- 靈活的分析和可視化平臺
- 實時總結流量和數據的圖表
- 爲不同的用戶顯示直觀的界面
- 即時分享和嵌入的儀表板
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中添加創建的圖表,即