E L K 以及 filebeat

《 Elasticsearch 》
ESC和mongdb都屬於document,NOSQL非關係型數據庫。
Elasticsearch 是一個基於apache lucene(性能最好,功能最全的全文搜索引擎)的搜索服務器,是一個分佈式多用戶的全文搜索引擎,基於JAVA開發的需要裝JDK的包,安裝即可。
基於restful web接口(用於客戶端和服務器交互類的軟件,更易於實現緩存等機制)。
它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在Elasticsearch中,是面向文檔的,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。
集羣的讀取數據的每臺服務器可能不同步。
特點:

  1. 分佈式存儲,每個字段都被索引,並且可搜索。
    2.分佈式的實時分析引擎。
    3.可以擴展到上百臺服務器,分佈式處理(PB級,Peripheral Buffer 外圍緩衝器)結構化和非結構化數據。
    JSON(document)文檔型,像 [列表] {字典} 分層解決。Lucene只是一個庫,用於Java的二次開發加了一些界面,通過提供的接口進行訪問,客戶端不用關心後臺是怎麼操作的。
    結構化(有規律) 無結構化(無規律無結構,如日誌)
    安裝:JDK: rpm -ivh jdk-8u162-linux-x64.rpm java -version 保證jdk是最新的包。
    如果不是最新的,切換,alternatives --config 軟件名
    創建esc的源:/etc/yum.repo.d/elasticsearch.repo
    [elasticsearch-6.x]
    name=Elasticsearch repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    安裝ESC的包: rpm -ivh elasticsearch-6.2.3.rpm
    開啓:systemctl start elasticsearch
    查找進程是否開啓: ps -ef |grep java (基於java的)
    l

設置監聽地址:vim /etc/elasticsearch/elasticsearch.yml
cluster.name: 集羣名字,統一的。(很多不允許數字開頭)
node.name: Node名字,自定義,自己的。
node.attr.rack: r1 機架名 ,根據生產環境定義,實驗測試可放在同一臺。
path.data: /var/lib/elasticsearch 數據存放路徑,習慣性的在/data/下做一個軟鏈:
(mv /var/lib/elasticsearch /data/ ln -s /data/elasticsearch /var/lib/elasticsearch)
path.logs: /var/log/elasticsearch 日誌存放路徑
discovery.zen.ping.unicast.hosts: 改版以後需要填域名,必須能解析 ,中括號裏的第一個主機一般都是master
在頁面裏 * 代表master ,做過羣集的服務器狀態低於%70說明數據不同步,舊的服務器認爲以前的NODE節點不在了便不會同步新的服務器。

node 節點數最好是單數,防止腦裂(雙數的羣集在master)
discovery.zen.ping.unicast.hosts: ["yxlxixi", "yxlhaha"]
network.host: 0.0.0.0 網絡主機

重啓:systemctl restart elasticsearch
ss -anl |grep 9200 elasticsearch 端口 9300 :ESC羣集之間通訊的 9100:圖形界面端口
查看 elasticsearch的信息(版本) :curl http://localhost:9200
"lucene_version" : "7.2.1": elasticsearch的版本信息,羣集之間的版本要相同,不然會導致數據不同步,爲了防止版本的不同步,在配置完elasticsearch.yml後改成備份的名字,ESC不認識的文件名,就可以防止yum update後的版本不一致導致數據不同步的現象。
curl 訪問ESC 的語法 :curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
說明:
VERB HTTP方法: GET , POST , PUT , HEAD , DELETE
PROTOCOL http或者https協議(只有在Elasticsearch前面有https代理的時候可用
HOST Elasticsearch集羣中的任何一個節點的主機名,如果是在本地的節點,那麼就叫localhost
PORT Elasticsearch HTTP服務所在的端口,默認爲9200
PATH API路徑(例如count將返回集羣中文檔的數量),PATH可以包含多個組件,例如cluster/stats或者
_nodes/stats/jvm
QUERY_STRING 一些可選的查詢請求參數,例如 ?pretty 參數將使請求返回更加美觀易讀的JSON數據 BODY 一個JSON格式的請求主體(如果請求需要的話)
查看master和node的狀態 :curl -X GET localhost:9200/_cat/nodes
查看羣集的狀態:curl -X GET localhost:9200/_cluster/state/nodes?pretty 或
curl -X GET localhost:9200/_cat/health

Logstash架構收集日誌
原理:監控nginx apache 等日誌,然後將收集的日誌(filter過濾)輸出(output)給本機的ESC或其他服務器的logstash,也可以是redis:<分層解決 層級之間鬆耦合 不xianghu依賴>
多臺服務器上都部署有logstash收集日誌(日誌收集的代理),寫在多個或一個redis(解耦合的隊列),後邊的logstash(集中日誌)從redis上讀取日誌數據再寫到ESC(存儲日誌)裏。因爲logstash收集的日誌太多太快,通過redis(慢)給後邊的logstash或者ESC減輕前臺Logstash的壓力,前臺的logstash只管把數據交給Redis其他的不管,這就是隊列服務器,Redis後邊的logstash或者ESC先進先出的順序來讀取數據。不產生依賴,一個壞掉不影響其他的。(這就是解耦合也就是鬆耦合的架構,兩個程序模塊有關聯就叫做耦合,也叫做生產者消費模型)如果沒有隊列,前臺的loastash得發送一個數據等後邊的服務器接收到才繼續下一個動作。

Logstash 安裝與測試:之前配置的elasticsearch.repo即可,yum -y install logstash
測試:/usr/share/logstash/bin/logstash -e 'input {stdin{}} output{stdout{codes=>rubydebug}}' --path.settings /etc/logstash
Logstash收集nginx log:

測試:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf --path.settings /etc/logstash &(後臺)
Kibana(圖形化操作界面)

filebeat:一個插件,也可以監控日誌,相當於agent和logstash,filebeat講數據傳輸給logstash或者redis,losstash再把數據存儲到ESC上:
配置filebeat:

重啓logstash . systemctl restart logstash
安裝: 在另一臺服務器上裝 rpm -ivh filebeat-6.2.4-x86_64.rpm
配置:

Hosts: server端logstash:ip 以及filebeat端口
vim /etc/firebeat/filebeat.yml : 註釋Outputs的hosts行 ,開啓logstash output行的hosts: ["server端的ip:5044"]
開啓: systemctl start filebeat
測試: curl http://localhost:9200/_cat/indices
瀏覽器測試:firebeat端ip 出現Apache的網頁多刷進行測試,再次查看,curl http://localhost:9200/_cat/indices ,發現日誌數量增多了。

有許多圖片沒上傳,暫時不上傳了。

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