ELK 是什麼?java
2018年07月04月 09:37:46node
內容和簡介python
• Sina、餓了麼、攜程、華爲、美團、freewheel、暢捷通 、新浪微博、大講臺、魅族、IBM...... 這些公司都在使用 ELK!ELK!ELK!linux
• ELK居然重複了三遍,是個什麼鬼?web
ELK 是什麼?數據庫
• ELK 其實並非一款軟件,而是一整套解決方案,是三個軟件產品的首字母縮寫json
– Elasticsearch:負責日誌檢索和儲存vim
– Logstash:負責日誌的收集和分析、處理api
– Kibana:負責日誌的可視化瀏覽器
– 這三款軟件都是開源軟件,一般是配合使用,並且又前後歸於 Elastic.co 公司名下,故被簡稱爲 ELK
l ELK 能作什麼?
• ELK組件在海量日誌系統的運維中,可用於解決:
– 分佈式日誌數據集中式查詢和管理
– 系統監控,包含系統硬件和應用各個組件的監控
– 故障排查
– 安全信息和事件管理
– 報表功能
l Elasticsearch部分
• ElasticSearch 是一個基於 Lucene 的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於 RESTful API 的 web 接口。
• Elasticsearch是用Java開發的,並做爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便
Elasticsearch部分
• 主要特色
– 實時分析
– 分佈式實時文件存儲,並將每個字段都編入索引
– 文檔導向,全部的對象所有是文檔
– 高可用性,易擴展,支持集羣(Cluster)、分片和複製(Shards 和 Replicas)
– 接口友好,支持 JSON
l Elasticsearch部分 《2續》
• ES 沒有什麼?
• Elasticsearch 沒有典型意義的事務.
• Elasticsearch 是一種面向文檔的數據庫。
• Elasticsearch 沒有提供受權和認證特性
l Elasticsearch部分 《3續》
• 相關概念:
– Node: 裝有一個 ES 服務器的節點。
– Cluster: 有多個Node組成的集羣
– Document: 一個可被搜素的基礎信息單元
– Index: 擁有類似特徵的文檔的集合
– Type: 一個索引中能夠定義一種或多種類型
– Filed: 是 ES 的最小單位,至關於數據的某一列
– Shards: 索引的分片,每個分片就是一個 Shard
– Replicas: 索引的拷貝
l SQL 與 NOSQL
• ES 與關係型數據庫的對比
Elasticsearch架構圖
ES集羣安裝
• 安裝第一臺 ES 服務器
– 設置主機名稱和 ip 對應關係
– 解決依賴關係
– 安裝軟件包
– 修改配置文件
– 啓動服務
步驟 1
設置 ip 與主機名稱對應關係
– 配置 /etc/hosts
192.168.4.11 node1
步驟 2
1.安裝 JDK
– Elasticsearch 要求至少 Java 7
– 通常推薦使用 OpenJDK 1.8
– 配置好安裝源之後,咱們先解決依賴關係
yum install -y java-1.8.0-openjdk
2.驗證
[root@esk01 ~]# java -version
openjdk version "1.8.0_131"
步驟 3
– 安裝 ES
rpm –ivh elasticsearch-2.3.4-1.noarch
步驟 4
– 修改配置文件
– elasticsearch.yml
[root@esk01 ~]# vim /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
步驟 5
1.修改本地解析hosts文件
192.168.1.11 esk01
192.168.1.32 esk02
192.168.1.33 esk03
192.168.1.34 esk04
192.168.1.35 esk05
拷貝
[root@esk01 ~]# scp /etc/hosts 192.168.1.35:/etc/hosts
2.啓動服務,設置自啓動
systemctl enable elasticsearch
systemctl start elasticsearch
– 驗證:
[root@esk01 ~]# netstat -lnput | grep :9[2..3]00
– 可以看到 9200,9300 被監聽
步驟 6
• 經過瀏覽器或 curl 訪問 9200 端口
curl http://192.168.4.11:9200/
{
"name" : "node1",
"cluster_name" : "my-es",
"version" : {
"number" : "2.3.4",
...... ...... ......
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search「
}
步驟7
l ES 集羣配置
– ES 集羣配置也很簡單,只須要對配置文件作少許的修
改便可,其餘步驟和單機徹底一致
– ES 集羣配置文件
1.修改配置文件
[root@esk01 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-es //隨便命名主機名
node.name: node1 //更改自已主機ip
network.host: 0.0.0.0 //全部ip匹配
discovery.zen.ping.unicast.hosts: ["node1", "node2",
"node3"]
2.拷貝配置文件模板到其餘主機上
[root@esk01 ~]# scp /etc/elasticsearch/elasticsearch.yml
192.168.1.35:/etc/elasticsearch/elasticsearch.yml
3.重啓服務
[root@esk01 ~]# systemctl start elasticsearch
[root@esk01 ~]# systemctl enable elasticsearch //先啓動esk01/02/03
4.測試
http://192.168.1.33:9200/
http://192.168.1.35:9200/_cluster/health?pretty
l ES集羣安裝
• ES 集羣配置
– 驗證集羣,使用 ES 內置字段 _cluster/health
curl http://192.168.4.11:9200/_cluster/health?pretty
{
"cluster_name" : "my-es",
"status" : "green",
...... ...... ......
"number_of_nodes" : 5,
"number_of_data_nodes" : 5,
...... ...... ......
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}ES集羣安裝
• ES 集羣驗證
– 返回字段解析
– status「 : 」green「 集羣狀態,綠色爲正常,黃色表
示有問題但不是很嚴重,紅色表示嚴重故障
– 「number_of_nodes」 : 5, 表示集羣中節點的數量
– "number_of_data_nodes" : 5,
– ...... ...... ......
– "task_max_waiting_in_queue_millis" : 0,
– "active_shards_percent_as_number" : 100.0
– }
l ES 集羣驗證
– 返回字段解析
– status「 : 」green「 集羣狀態,綠色爲正常,黃色表
ES插件的使用
• ES 經常使用插件
• head 插件:
– 它展示ES集羣的拓撲結構,而且能夠經過它來進行索引(Index)和節點(Node)級別的操做
– 它提供一組針對集羣的查詢API,並將結果以json和表格形式返回
– 它提供一些快捷菜單,用以展示集羣的各類狀態
http請求由三部分組成
– 分別是:請求行、消息報頭、請求正文
– 請求行以一個方法符號開頭,以空格分開,後面跟着請求的URI和協議的版本,格式以下:
Method Request-URI HTTP-Version CRLF
l HTTP 協議簡介
• http請求方法
– 經常使用方法 GET, POST, HEAD
– 其餘方法 OPTIONS, PUT, DELETE, TRACE 和
CONNECT
• ES 經常使用
– PUT
--- 增
– DELETE --- 刪
– POST --- 改
– GET --- 查
系統命令 curl
• 在linux中curl是一個利用URL規則在命令行下工做的文件傳輸工具,能夠說是一款很強大的http命令行工具。它支持多種請求模式,自定義請求 頭等強大功能,是一款綜合工具
• curl 經常使用參數介紹
– -A 修改請求 agent
– -X 設置請求方法
– -i 顯示返回頭信息
ES插件的使用
• ES 經常使用插件
• head 插件:
– 它展示ES集羣的拓撲結構,而且能夠經過它來進行索引(Index)和節點(Node)級別的操做
– 它提供一組針對集羣的查詢API,並將結果以json和表格形式返回
– 它提供一些快捷菜單,用以展示集羣的各類狀態ES插件的使用
• ES 經常使用插件
• kopf 插件
– 是一個ElasticSearch的管理工具
– 它提供了對ES集羣操做的API
• bigdesk 插件
– 是elasticsearch的一個集羣監控工具
– 能夠經過它來查看es集羣的各類狀態,如:cpu、內存使用狀況,索引數據、搜索狀況,htt鏈接數等ES插件的使用
• ES 插件安裝、查看
1.查看安裝的插件
/usr/share/elasticsearch/bin/plugin list
2.安裝插件
/usr/share/elasticsearch/bin/plugin install
ftp://192.168.4.254/
/usr/share/elasticsearch/bin/plugin install
/usr/share/elasticsearch/bin/plugin install
ftp://192.168.1.254/share/bigdesk-master.zip
– 這裏必須使用 url 的方式進行安裝,若是文件在本地,咱們也須要使用 file:// 的方式指定路徑,例如文件在/tmp/xxx 下面,咱們要寫成 file:///tmp/xxx 刪除使用 remove 指令
3.訪問
http://192.168.1.11:9200/_plugin/head/
http://192.168.1.11:9200/_plugin/kopf/
http://192.168.1.11:9200/_plugin/bigdesk/
4.查看集羣api查詢地址
curl http://192.168.1.11:9200/_cat
curl http://192.168.1.11:9200/_cat/nodes?v
curl http://192.168.1.11:9200/_cat/nodes?help
RESTful API 調用
• Elasticsearch提供了一系列RESTful的API
– 檢查集羣、節點、索引的健康度、狀態和統計
– 管理集羣、節點、索引的數據及元數據
– 對索引進行CRUD操做及查詢操做
– 執行其餘高級操做如分頁、排序、過濾等
• POST 或 PUT 數據使用 json 格式RESTful API 調用
• json
– JSON的全稱是」JavaScript Object Notation」,意思是JavaScript對象表示法,它是一種基於文本,獨立於語言的輕量級數據交換格式。
– json 傳輸的就是一個字符串
– python 中對應的 字符串,列表,字典均可以轉換成對應的 json 格式RESTful API 調用
• Rest API 的簡單使用
– _cat API 查詢集羣狀態,節點信息
– v 參數顯示詳細信息
http://192.168.4.15:9200/_cat/health?v
– help 顯示幫助信息
http://192.168.4.15:9200/_cat/health?helpRESTful API 調用
• Rest API 的簡單使用
– nodes 查詢節點狀態信息
http://192.168.4.15:9200/_cat/nodes?v
– 索引信息
http://192.168.4.15:9200/_cat/indices?v
RESTful API 調用
• RESTful API 增長
– 建立一個索引,並設置分片數量與副本數量
[root@esk01 ~]# curl -X "PUT" 'http://192.168.1.11:9200/tedu' -d '{
"settings":{
"index":{
"number_of_shards": 5,
"number_of_replicas":1
}
}
}'
• RESTful API 插入數據
curl -X "PUT" 'http://192.168.1.11:9200/tedu/teacher/1' -d '{
"title": "階段1",
"name":{"first": "小逗比", "last": "牛犇"},
"age": 25
}'
curl -X "PUT" 'http://192.168.1.11:9200/tedu/teacher/2' -d '{
"title": "階段2",
"name":{"first": "老逗比", "last": "丁丁"},
"age": 52
}'
RESTful API 調用
• 靜靜達內一枝花,今年20明年18
curl -X "POST" 'http://192.168.1.11:9200/tedu/teacher/3/_update' -d '{
"doc":{
"age": 18
}
}'
Kibana 安裝
• kibana是什麼
– 數據可視化平臺工具
• 特色:
– 靈活的分析和可視化平臺
– 實時總結和流數據的圖表
– 爲不一樣的用戶顯示直觀的界面
– 即時分享和嵌入的儀表板
l Kibana 安裝
• kibana安裝
– kibana 的安裝很是簡單,咱們使用 rpm 方式安裝
rpm -ivh kibana-4.5.2-1.x86_64.rpm
– kibana 默認安裝在 /opt/kibana 下面,配置文件在/opt/kibana/config/kibana.yml
– 咱們只須要修改少許的配置就能夠啓動
l Kibana 安裝
• kibana.yml 的配置
– server.port: 5601
– server.host: "0.0.0.0"
– elasticsearch.url: "http://192.168.4.13:9200"
– kibana.index: ".kibana"
– kibana.defaultAppId: "discover"
– elasticsearch.pingTimeout: 1500
– elasticsearch.requestTimeout: 30000
– elasticsearch.startupTimeout: 5000
l Kibana 安裝
• kibana.yml 的配置
– 除 elasticsearch.url 須要配置爲咱們 ES 集羣的地址以外,其餘保持默認值就能夠了
– 設置開機啓動
systemctl enable kibana
– 啓動服務
systemctl start kibana
– web 訪問 kibana
l Kibana 安裝
• kibana是什麼
– 數據可視化平臺工具
• 特色:
– 靈活的分析和可視化平臺
– 實時總結和流數據的圖表
– 爲不一樣的用戶顯示直觀的界面
– 即時分享和嵌入的儀表板Kibana 安裝
• kibana安裝
– kibana 的安裝很是簡單,咱們使用 rpm 方式安裝
rpm –ivh kibana-4.5.2-1.x86_64.rpm
– kibana 默認安裝在 /opt/kibana 下面,配置文件在/opt/kibana/config/kibana.yml
– 咱們只須要修改少許的配置就能夠啓動Kibana 安裝
• kibana.yml 的配置
– server.port: 5601
– server.host: "0.0.0.0"
– elasticsearch.url: "http://192.168.4.13:9200"
– kibana.index: ".kibana"
– kibana.defaultAppId: "discover"
– elasticsearch.pingTimeout: 1500
– elasticsearch.requestTimeout: 30000
– elasticsearch.startupTimeout: 5000Kibana 安裝
• kibana.yml 的配置
– 除 elasticsearch.url 須要配置爲咱們 ES 集羣的地址以外,其餘保持默認值就能夠了
– 設置開機啓動
systemctl enable kibana
– 啓動服務
systemctl start kibana
– web 訪問 kibana
http://192.168.4.20:5601/課堂練習