ARCHITECTURE:分佈式ELK平臺,ES集羣

分佈式ELK平臺

ELK簡介

來源

在微服務開發過程中,一般都會利用多臺服務器做分佈式部署,如何能夠把分散在各個服務器中的日誌歸集起來做分析處理,是一個微服務服務需要考慮的一個因素。

什麼是ELK

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

ELK能做什麼

- ELK組件在海量日誌系統的運維中,可用於解決
– 分佈式日誌數據集中式查詢和管理
– 系統監控,包括系統硬件和應用各個組件的監控
– 故障排查
– 安全信息和事件管理
– 報表功能

Elasticsearch

在這裏插入圖片描述

主要特點

– 實時分析
– 分佈式實時文件存儲,並將每一個字段都編入索引
– 文檔導向,所有的對象全部是文檔
– 高可用性,易擴展,支持集羣(Cluster)、分片和複製(Shards和Replicas)
– 接口友好,支持JSON

ES缺點

– Elasticsearch沒有典型意義的事務
– 是一種面向文檔的數據庫
– 沒有提供授權和認證特性

相關概念

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

ES與關係型數據庫的對比

– 在ES中,文檔歸屬一種類型(type), 而這些類型存在於索引(index)中,類比傳統關係型數據庫

 DB -> Databases -> Tables -> Rows -> Columns
關係型    數據庫         表       行        列

ES -> Indices    -> Types -> Dcuments -> Fields
ES       索引         類型       文檔      域(字段)
Relational database Elasticsearch
Database index
Table Type
Row Document
Column Field
Schema Mapping
Index Everything is indexed
SQL Query DSL
SELECT * FROM table… GET http://…
UPDATE table SET PUT http://…

Elasticsearch架構圖

在這裏插入圖片描述

ES集羣安裝

在這裏插入圖片描述

  • 主機名
  • IP地址
  • /etc/hosts配置主機名解析
  • yum源 CentOS7-1804.iso 和
[[email protected] ~]$ ls /var/ftp/elk
kibana-4.5.2-1.x86_64.rpm   logstash-2.3.4-1.noarch.rpm  
repodata   filebeat-1.2.3-x86_64.rpm
  • 安裝JDK
    – 要求至少java 7
    – 推薦openjdk 1.8

  • 在es1上

vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-Base
baseurl="ftp://192.168.1.254/system"
enabled=1
gpgcheck=0
[elk]
name=elk
baseurl="ftp://192.168.1.254/elk"
enabled=1
gpgcheck=0

yum -y install java-1.8.0-openjdk.x86_64
java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
sestatus  //查看selinux狀態
SELinux status:                 disabled   
yum -y install elasticsearch
vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: myelk   #配置集羣名字
23 node.name: es1        #當前主機名稱
54 network.host: 0.0.0.0 #0.0.0.0(監聽所有地址)
68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"]  
//聲明集羣裏的主機成員有誰,不需要全部寫進去
systemctl restart elasticsearch
systemctl enable elasticsearch
ss -antup | grep 9200
ss -antup | grep 9300
  • 查看是否成功
curl http://192.168.1.51:9200
{
  "name" : "es1",
  "cluster_name" : "myelk",
  "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"
}

部署多臺es

使用ansible部署ES集羣
ansible的安裝部署請查看ansible基礎及部署

vim elk.yml
---
- name: 批量部署elk
  hosts: es
  tasks:
    - name: 配置yum源
      copy:
        src: /etc/yum.repos.d/local.repo
        dest: /etc/yum.repos.d/local.repo
    - name: 配置主機名
      copy:
        src: /etc/hosts
        dest: /etc/hosts
    - name: 安裝jdk
      yum:
        name: java-1.8.0-openjdk
        state: installed
    - name: 安裝elasticsearch
      yum:
        name: elasticsearch
        state: installed
    - name: 修改elk配置文件
      copy:
        src: /etc/elasticsearch/elasticsearch.yml
        dest: /etc/elasticsearch/elasticsearch.yml
    - replace:
        path: /etc/elasticsearch/elasticsearch.yml
          regexp: 'es1$'
          replace: "${HOSTNAME}"
#或者        replace: "{{inventory_hostname}}"
    - service:
        name: elasticsearch.service
        state: started
        enabled: yes
  • 測試
firefox http://192.168.1.51:9200/_cluster/health?pretty

在這裏插入圖片描述

ES插件使用

head插件

在這裏插入圖片描述

kopf插件

在這裏插入圖片描述

bigdesk插件

在這裏插入圖片描述

安裝

插件裝在哪一臺機器上,只能在哪臺機器上使用(這裏安裝在es5機器上面)

cd /usr/share/elasticsearch/bin
./plugin  install  \ 
ftp://192.168.1.254/elk/elasticsearch-head-master.zip     #安裝head插件

./plugin  install  \ 
ftp://192.168.1.254/elk/elasticsearch-kopf-master.zip     #安裝kopf插件

./plugin install  \
ftp://192.168.1.254/elk/bigdesk-master.zip
#安裝bigdesk插件

./plugin  list   #查看安裝的插件
Installed plugins in /usr/share/elasticsearch/plugins:
    - head
    - kopf
    - bigdesk     

訪問head插件

firefox http://192.168.1.55:9200/_plugin/head
在這裏插入圖片描述

訪問kopf插件

firefox http://192.168.1.55:9200/_plugin/kopf
在這裏插入圖片描述

訪問bigdesk插件

firefox http://192.168.1.55:9200/_plugin/bigdesk
在這裏插入圖片描述

使用head創建index

curl -X PUT "http://192.168.1.55:9200/index" -d '
> {
>     "settings":{
>     "index":{
>     "number_of_shards":5,    #分片數
>     "number_of_replicas":1   #副本數
>    }
>   }
> }'
{"acknowledged":true}

擴展插件

RESTful API

HTTP協議簡介

  • 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 顯示返回頭信息

RESTful API調用

  • Elasticsearch提供一系列RESTful的API
    – 檢查集羣,節點,索引的健康度,狀態和統計
    – 管理集羣,節點,索引的數據及元數據
    – 對索引進行CRUD操作及查詢操作
    – 執行其他高級操作如分頁,排序,過濾等
  • POST或PUT數據使用json格式
  • JSON
    — JSON(JavaScript Object NOtation),意思是JavaScript對象表達法,它是一種基於文本獨立於語言的輕量級數據交換格式
  • RESTful API的簡單使用
    – _cat API查詢集羣狀態,節點信息
    – v參數顯示詳細信息
    curl http://192.168.1.51:9200/_cat/health?v
    — help顯示幫助信息
    curl http://192.168.1.51:9200/_cat/health?help
    – nodes查詢節點狀態信息
    curl http://192.168.1.51:9200/_cat/nodes?v
    – 索引信息
    curl http://192.168.1.51:9200/_cat/indices?v

增加數據

curl -X PUT "http://192.168.1.55:9200/tedu/teacher/1" -d '{
"職業":"詩人",
"名字":"李白",
"稱號":"詩仙",
"年代":"唐"
}'
{"_index":"tedu","_type":"teacher","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}

修改數據

curl -X PUT "http://192.168.1.55:9200/tedu/teacher/1" -d '{
 "doc":{
 "年代": "唐代"
 }
 }'
{"_index":"tedu","_type":"teacher","_id":"1","_version":3,"_shards":{"total":2,"successful":2,"failed":0},"created":false}

或者

curl -X POST "http://192.168.1.55:9200/tedu/teacher/1/_update" -d '{
 "doc":{
 "年代": "唐代"
 }
 }'
{"_index":"tedu","_type":"teacher","_id":"1","_version":3,"_shards":{"total":2,"successful":2,"failed":0},"created":false}

查詢數據

curl -X GET "http://192.168.1.55:9200/tedu/teacher/3?pretty"
{
  "_index" : "tedu",
  "_type" : "teacher",
  "_id" : "3",
  "found" : false
}

刪除數據

curl -X DELETE "http://192.168.1.55:9200/tedu/teacher/3?pretty"
{
  "found" : false,
  "_index" : "tedu",
  "_type" : "teacher",
  "_id" : "3",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  }
}

刪除索引

curl -X DELETE http://192.168.1.55:9200/tedu/ #刪除索引
{"acknowledged":true}
curl -X DELETE http://192.168.1.65:9200/*  #刪除所有索引
{"acknowledged":true}

導入數據

gzip  -d logs.jsonl.gz
curl -X POST "http://192.168.1.51:9200/_bulk"  \ 
--data-binary @logs.jsonl
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章