• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 9-14 ELK日志分析系統搭建----博客

    標簽: 分布式文件系統與企業級應用  分布式  ELK  分布式文件系統

    ELK日志分析日志

    一:ELK日志分析系統簡介

    1.1 一般的日志服務器

    • 提高安全性
    • 集中存放日志
    • 缺陷:對日志的分析困難

    1.2 ELK日志分析系統

    • Elasticsearch

    • Logstash

    • Kibana

    • mark

      1. Logstash部署至服務主機,對各個服務的日志進行采集、過濾、推送。
      2. Elasticsearch存儲Logstash傳送的結構化數據,提供給Kibana。
      3. Kibana提供用戶UIweb頁面進行,數據展示和分析形成圖表等。
      4. logs 泛指,各種日志文件以及日志信息:windows,negix,tomcat,webserver等等。

    1.3 日志處理步驟

    1.將APP servers的日志進行集中化管理到Logstash agent

    2.將日志格式化(Logstash)并輸出到Elasticsearch cluster

    3.對格式化后的數據進行索引和存儲(Elasticsearch)

    4.前端數據的展示(Kibana)

    5.可以在線查看界面化展示

    mark

    Logstash 收集APP server產生的log,然后存放到Elasticsearch集群節點中

    kibana從Elasticsearch集群節點中查詢數據生成圖表,再返回給Brower

    二:Elasticsearch介紹

    2.1 Elasticsearch概述

    • 提供了一個分布式多用戶能力的全文搜索引擎
    • 是一個基于Lucene的搜索服務器
    • 基于restful web接口
    • 使用java開發
    • 作為apache許可條款下的開放源碼發布,是第二流行的企業搜索引擎
    • 被設計用于云計算中,能夠達到實時搜索、穩定、可靠、快速、安裝實用方便的需求

    2.2 Elasticsearch的概念

    • 接近實時(NRT)

    Elasticsearch是一個接近即時的搜索平臺,從索引一個文檔知道這個文檔能夠被搜索到的過程中有一個輕微的延遲(通常是1S)

    • 集群(cluster)

    由一個及其以上的節點組織在一起,它們共同持有整個數據,并一起提供索引和搜索功能

    其中一個節點為主節點,這個節點是可以通過選舉產生,并提供跨節點的聯合索引和搜索的功能

    集群有一個唯一標識的名字,默認是elaticsearch

    集群名字很重要,每個節點是基于集群名字加入到其集群中;因此,要確保集群的唯一性,在不同環境中使用不同的集群名字

    一個集群只可以有一個節點,建議在配置elasticsearch時,配置成集群模式

    • 節點(node)

    節點就是一臺單一的服務器,是集群的一部分,存儲數據并參與集群的索引和搜索功能

    像集群一樣,節點之間可是通過名字來標識區分,默認是在節點啟動時隨機分配的字符名

    當然,你可以自己定義,該名字很重要,起到在集群中定位到對應的節點

    節點可以通過指定集群名字來加入到集群中,默認情況下,每個節點被設置成加入到elasticsearch集群。

    如果啟動了多個節點,假設能夠自動發現對方,他們將會自動組建一個名為elastisearch的集群

    • 索引(index)——索引(庫)——類型(表)——文檔(記錄)

    一個索引就是一個擁有幾分相似特征的文檔的集合

    比如說,你可以有一個客戶數據的索引、一個產品目錄的索引、還有一個訂單數據的索引

    一個索引用一個名字來標識(必須全部是小寫字母組合),并且當我們要對相應的索引中的文檔進行索引、收縮、更新和刪除的時候,都要用到這個名字

    在一個集群中,可以定義多個索引

    • 類型(type)

    在一個索引中,你可以定義一種或多種類型

    一個類型是你的索引的一個邏輯上的分類分區,其寓意完全由你來定義

    通常,會為具有一組共同字段的文檔定義一個類型

    比如:我們假設運營一個博客平臺并且將所有的數據存儲到一個索引中,在這個索引中,你可以為用戶數據定義一個類型,為博客數據定義一個類型,也可以為評論數據定義另一個類型

    • 文檔(Document)

    一個文檔是一個可被索引的基礎信息單元

    比如:你可以擁有一個客戶的文檔,某一個產品的文檔;文檔以JSON(Javascript Object Notation)格式來表示,json是一個通用的互聯網數據交互模式

    在一個index/type內,你可以存儲任意多的文檔

    注意:雖然一個文檔在物理上位于一個索引內,但是實際上一個文檔必須在一個索引內可以被索引和分配一個類型

    • 分片和副本 (shards & replicas)

    在實際情況下,索引存儲的數據可能超過單個節點的硬件設置

    比如十億個文檔需要1TB空間存儲,可能不適合存儲在單個節點上,讀寫被限制在單個節點;從單個節點搜索請求也太慢了

    為了解決這個問題,elasticsearch集群提供將索引分割開,進行分片的功能

    當創建索引時,可以定義想要分片的數量

    每一個分片就是一個全功能的獨立的索引,可以位于集群中的任何節點上

    2.3 分片的兩個最主要原因:

    1.可以進行水平分割橫向擴展,增大存儲量

    2.分布式并行跨分片操作,提高性能和吞吐量

    分布式分片的機制和搜索i請求的文檔如何匯總由elasticsearch控制,這些對用戶來說是透明的

    網絡問題等其他不可控因素可以在任何時候不期而至,為了集群的健壯性,可以做一個故障切換機制,無論出現何種故障以防止分片或者節點不可用,為此,elasticsearch可以將索引分片復制一份或者多分,這被稱之為分片副本

    2.4 開啟分片副本的主要原因

    1.高可用性,以應對分片或者節點故障,處于這個原因,分片副本要在不同節點上

    2.提高IO性能,增大吞吐量,搜索可以并行在所有副本執行

    總之,每個索引可以被分成多個分片,一個索引也可以被復制0次或者多次

    一旦復制了,每個索引就有了主分片(可以作為復制源的原始分片)和復制分片(主分片的拷貝)之分

    分片和副本的數量可以在索引創建的時候指定,在索引創建之后,你可以在任何時候動態改變副本的數量,但是你事后無法改變分片的數量

    默認情況下,Elasticsearch中的每個索引被分片為5個主分片和1個副本,這意味著,如果你的集群中至少有兩個節點的情況下,你的索引將會有5個主分片和另外5個副本分片(1個完全拷貝),這樣的話每個索引總共就有10個分片

    三:Logstash介紹

    3.1 Logstash概述

    • 一款強大的數據處理工具,可以實現數據傳輸、格式處理、格式化輸出
    • 工作思路:數據輸入(collect)、數據加工(如過濾、改寫等enrich)以及數據輸出(transport)
    • 由LRuby語言編寫,基于消息(message-based)的簡單架構,并運行在Java虛擬機(JVM)上。
    • 不同于分離的代理端(agent)或主機端(server),Logstash可配置單一的代理端(agent)與其他開源軟件結合,以實現不同的功能

    3.2 Logstash主要組件

    • Shipper:日志收集

    負責監控本地日志文件的變化,及時把日志文件的最新內容收集起來

    通常,遠程代理端(agent)只需要運行這個組件即可

    • Indexer:日志存儲

    負責接受日志并寫入到本地文件

    • Broker:日志hub

    負責鏈接多個shipper和對應數目的indexer

    • Search and Storage

    允許對事件進行搜索和存儲

    • Web Interface

    基于web的展示界面

    以上組件在lLogstash架構中可以獨立部署,因此提供了很好的集群擴展性.

    • mark

    • Logstash由input、filter和output三部分組成,

      input負責從數據源提取數據,

      filter負責解析、處理數據,

      output負責輸出數據,每部分都有提供豐富的插件

    3.3 Logstash主機分類

    • 代理主機(agent):作為事件的傳遞者(shipper),將各種日志數據發送到中心主機;只需要運行logstash代理程序
    • 中心主機(central host):可運行包括中間轉發器(broker)、索引器(indexer)、搜索和存儲器(search & storage)、web界面端(web interface)在內的各個組件,以實現對日志數據地接收、處理和存儲

    四:Kibana介紹

    4.1 Kibana概述

    • 一個針對Elasticsearch的開源分析及可視化平臺
    • 搜索、查看存儲在Elasticsearch索引中的數據
    • 通過各種圖標進行高級數據分析及展示
    • 讓海量數據更容易理解
    • 操作簡單,基于瀏覽器地用戶界面就可以快速創建儀表板(dashboard)實時顯示Elasticsearch查詢動態
    • 設置安裝Kibana非常簡單,無需編寫代碼,幾分鐘內就可以完成Kibana安裝并啟動Elasticsearch監測

    4.2 Kibana主要功能

    • Elasticsearch無縫之集成。Kibana架構為Elasticsearch定制,可以將任何結構化和非結構化加入Elasticsearch索引,Kibana還充分利用了Elasticsearch強大的搜索和分析功能
    • 整合數據,復雜數據分析;根據海量數據創建柱形圖、折線圖、三代泥土、直方圖、餅圖和地圖;提升了Elasticsearch地分析能力,更夠更加智能化地分析數據,執行數學轉化并且根據要求對數據切割分塊
    • 讓更多團隊成員受益;強大的數據可視化讓各個業務崗位都可以直觀了解數據
    • 接口靈活,分享更容易;使用Kibana可以更加方便地創建保存和分享數據,并將可視化數據快速交流
    • 配置簡單,可視化多數據源;Kibana地配置和啟動非常簡單,用戶體驗友好,Kibana自帶web服務器,可以快速運行;kibana可以非常方便地把來自logstash、ES-hadoop、Beats或第三方技術整合到Elasticsearch,支持地第三方技術包括apacheflume、fluentd等
    • 簡單數據導出;Kibana可以方便地導出感興趣地數據,與其他數據融合后快速建模分析,發現新結果

    五:實操演示

    三臺centos7服務器,配置安裝ELK日志分析系統

    安裝集群方式,兩個Elasticsearch節點,并監控apache服務器日志

    主機名IP地址安裝軟件
    node1192.168.100.140Elasticsearch 、Kibana
    node2192.168.100.150Elasticsearch
    apache192.168.100.160Logstash 、apahce

    mark

    mark

    5.1: 配置環境

    • #配置主機名
      
      hostnamectl set-hostanme node1   ##192.168.100.140
      hostnamectl set-hostname node2   ##192.168.100.150
      hostnamectl set-hostname apache  ##192.168.100.160
      
      #關閉防火墻和SElinux安全性功能
      systemctl stop firewalld
      setenforce 0
      
      #查看java環境
      [root@node1 elk]# java -version
      openjdk version "1.8.0_181"
      [root@node2 ~]# java -version
      openjdk version "1.8.0_181"
      
      #在node1和node2中做地址映射
      vi /etc/hosts
      192.168.100.140 node1
      192.168.100.150 node2
      

    5.2: 部署elasticsearch軟件(node1和node2都需要安裝)

    • 配置node1

      1、安裝elasticsearch—rpm包
      [root@node1 ~]# mount.cifs //192.168.1.150/redhat7 /mnt
      Password for root@//192.168.1.150/redhat7:  ******
      [root@node1 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# pwd
      /mnt/elk
      
      [root@node1 ~]# cd /opt
      [root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm ##安裝
       
      2、加載系統服務
      [root@node1 opt]# systemctl daemon-reload    
      [root@node1 opt]# systemctl enable elasticsearch.service    ##永久啟動elasticsearch服務
       
      3、更改elasticsearch主配置文件
      [root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
      [root@node1 opt]#  vim /etc/elasticsearch/elasticsearch.yml
      17)cluster.name: my-elk-cluster                   ####集群名字
      23)node.name: node1                                  ####節點名字
      33)path.data: /data/elk_data                        ####數據存放路徑
      37)path.logs: /var/log/elasticsearch/           ####日志存放路徑
      43)bootstrap.memory_lock: false                 ####不在啟動的時候鎖定內存
      55)network.host: 0.0.0.0                               ####提供服務綁定的IP地址,0.0.0.0代表所有地址
      59)http.port: 9200                                        ####偵聽端口為9200
      68)discovery.zen.ping.unicast.hosts: ["node1", "node2"]           ####集群發現通過單播實現
       
      [root@node1 opt]#  grep -v "^#" /etc/elasticsearch/elasticsearch.yml
      cluster.name: my-elk-cluster
      node.name: node1
      path.data: /data/elk_data
      path.logs: /var/log/elasticsearch/
      bootstrap.memory_lock: false
      network.host: 0.0.0.0
      http.port: 9200
      discovery.zen.ping.unicast.hosts: ["node1", "node2"]
       
      4、創建數據存放路徑并授權
      [root@node1 ~]# mkdir -p /data/elk_data
      [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/    ##設置日志文件的屬性
      [root@node1 etc]# id elasticsearch		"安裝rpm包后自帶用戶"
      uid=987(elasticsearch) gid=981(elasticsearch) =981(elasticsearch)
       
      5、啟動elasticsearch是否成功開啟
      [root@node1 ~]# systemctl start elasticsearch.service 
      [root@node1 ~]# netstat -natp | grep 9200
      tcp6       0      0 :::9200                 :::*                    LISTEN      37295/java          
      [root@node1 ~]# 
      
    • mark

    • 配置node2

      1、安裝elasticsearch—rpm包
      [root@node2 ~]# mount.cifs //192.168.1.150/redhat7 /mnt
      Password for root@//192.168.1.150/redhat7:  ******
      [root@node2 ~ ]# cd /mnt/elk
      [root@node2 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# pwd
      /mnt/elk
      
      [root@node2 ~]# cd /opt
      [root@node2 opt]# rpm -ivh elasticsearch-5.5.0.rpm ##安裝
       
      2、加載系統服務
      [root@node2 opt]# systemctl daemon-reload    
      [root@node2 opt]# systemctl enable elasticsearch.service    ##永久啟動elasticsearch服務
       
      3、更改elasticsearch主配置文件
      [root@node2 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
      [root@node2 opt]#  vim /etc/elasticsearch/elasticsearch.yml
      17)cluster.name: my-elk-cluster                   ####集群名字
      23)node.name: node2                                  ####節點名字
      33)path.data: /data/elk_data                        ####數據存放路徑
      37)path.logs: /var/log/elasticsearch/           ####日志存放路徑
      43)bootstrap.memory_lock: false                 ####不在啟動的時候鎖定內存
      55)network.host: 0.0.0.0                               ####提供服務綁定的IP地址,0.0.0.0代表所有地址
      59)http.port: 9200                                        ####偵聽端口為9200
      68)discovery.zen.ping.unicast.hosts: ["node1", "node2"]           ####集群發現通過單播實現
       
      [root@node2 opt]#  grep -v "^#" /etc/elasticsearch/elasticsearch.yml
      cluster.name: my-elk-cluster
      node.name: node2
      path.data: /data/elk_data
      path.logs: /var/log/elasticsearch/
      bootstrap.memory_lock: false
      network.host: 0.0.0.0
      http.port: 9200
      discovery.zen.ping.unicast.hosts: ["node1", "node2"]
       
      4、創建數據存放路徑并授權
      [root@node2 ~]# mkdir -p /data/elk_data
      [root@node2 ~]# chown elasticsearch:elasticsearch /data/elk_data/    ##設置日志文件的屬性
      [root@node2 etc]# id elasticsearch		"安裝rpm包后自帶用戶"
      uid=987(elasticsearch) gid=981(elasticsearch) =981(elasticsearch)
       
      5、啟動elasticsearch是否成功開啟
      [root@node2 ~]# systemctl start elasticsearch.service 
      [root@node2 opt]# netstat -natp | grep 9200
      tcp6       0      0 :::9200                 :::*                    LISTEN      10640/java  
      [root@node1 ~]# 
      #直接訪問
      192.168.100.140:9200
      192.168.100.150:9200
      #查看node1和node2的健康信息
      192.168.100.140:9200/_cluster/health?pretty
      192.168.100.150:9200/_cluster/health?pretty
      
      #查看集群狀態信息
      192.168.100.140:9200/_cluster/state?pretty
      192.168.100.150:9200/_cluster/state?pretty
      

      mark

    • 查看node1和node2的健康信息

      mark

      mark

      注:由于通過上面的信息查看elasticsearch的集群信息,比較麻煩,所以下面使用elastcsearch-head插件來視圖化管理集群

    5.3: 部署elasticsearch-head插件(node1和node2都需要安裝)

    • 配置node1

      #編譯安裝node組件依賴包##耗時比較長
      [root@node1 opt]# yum install gcc gcc-c++ make -y    ##安裝編譯工具
      [root@node2 ~ ]# cd /mnt/elk
      [root@node2 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# tar xzvf node-v8.2.1.tar.gz -C /opt
      [root@node1 elk]# cd /opt/node-v8.2.1/
      [root@node1 node-v8.2.1]# ./configure 
      [root@node1 node-v8.2.1]# make -j4
      [root@node1 node-v8.2.1]# make install
       
      #安裝phantomjs(前段框架顯示)####
      上傳軟件包到/usr/local/src/
      [root@node1 node-v8.2.1]# cd /mnt/elk
      [root@node1 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
      [root@node1 elk]# cd /usr/local/src
      [root@node1 src]# ls
      phantomjs-2.1.1-linux-x86_64
      [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin
      [root@node1 bin]# cp phantomjs /usr/local/bin
       
       
      #安裝elasticsearch-head(支持插件視圖化管理集群)###
      
      [root@node1 node-v8.2.1]# cd /mnt/elk
      [root@node1 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# tar xzvf elasticsearch-head.tar.gz -C /usr/local/src
      cd /usr/local/src/
      cd elasticsearch-head/
      npm install
      
       
      #####修改主配置文件###
      [root@node1 ~]# cd ~
      [root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml   ####下面配置文件,插末尾##
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      [root@node1t ~]# systemctl restart elasticsearch
       
      ####啟動elasticsearch-head  啟動服務器####
      [root@node1 ~]# cd /usr/local/src/elasticsearch-head/
      [root@node1 elasticsearch-head]# npm run start &      ####切換到后臺運行
      [1] 114729
      [root@node1 elasticsearch-head]# 
      > elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
      > grunt server
      
      Running "connect:server" (connect) task
      Waiting forever...
      Started connect web server on http://localhost:9100	##回車
       
      [root@node1 elasticsearch-head]# netstat -lnupt | grep 9100
      tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      58131/grunt         
      [root@node1 elasticsearch-head]# netstat -lnupt | grep 9200
      tcp6       0      0 :::9200                 :::*                    LISTEN      58031/java  
      
    • 配置node2

      #編譯安裝node組件依賴包##耗時比較長
      [root@node1 opt]# yum install gcc gcc-c++ make -y    ##安裝編譯工具
      [root@node2 ~ ]# cd /mnt/elk
      [root@node2 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# tar xzvf node-v8.2.1.tar.gz -C /opt
      [root@node1 elk]# cd /opt/node-v8.2.1/
      [root@node1 node-v8.2.1]# ./configure 
      [root@node1 node-v8.2.1]# make -j4
      [root@node1 node-v8.2.1]# make install
       
      #安裝phantomjs(前段框架顯示)####
      上傳軟件包到/usr/local/src/
      [root@node1 node-v8.2.1]# cd /mnt/elk
      [root@node1 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
      [root@node1 elk]# cd /usr/local/src
      [root@node1 src]# ls
      phantomjs-2.1.1-linux-x86_64
      [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin
      [root@node1 bin]# cp phantomjs /usr/local/bin
       
      #安裝elasticsearch-head(支持插件視圖化管理集群)###
      
      [root@node1 node-v8.2.1]# cd /mnt/elk
      [root@node1 elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      [root@node1 elk]# tar xzvf elasticsearch-head.tar.gz -C /usr/local/src
      cd /usr/local/src/
      cd elasticsearch-head/
      npm install
      
      #修改主配置文件###
      [root@node1 ~]# cd ~
      [root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml   ####下面配置文件,插末尾##
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      [root@node1t ~]# systemctl restart elasticsearch
       
      #啟動elasticsearch-head  啟動服務器####
      [root@node1 ~]# cd /usr/local/src/elasticsearch-head/
      [root@node1 elasticsearch-head]# npm run start &      ####切換到后臺運行
      [1] 114729
      [root@node1 elasticsearch-head]# 
      > elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
      > grunt server				"自動彈出"
      
      Running "connect:server" (connect) task
      Waiting forever...
      Started connect web server on http://localhost:9100	##回車
       
      [root@node2 elasticsearch-head]# netstat -lnupt | grep 9100
      tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112114/grunt        
      [root@node2 elasticsearch-head]# netstat -lnupt | grep 9200
      tcp6       0      0 :::9200                 :::*                    LISTEN      112022/java  
      
    • 在物理機上訪問elasticsearch集群狀態

      mark

      mark

    5.4: 創建elasticsearch索引

    • 創建索引有兩種方式

    • 第一種,直接在web頁面上創建

      mark

    • 第二種使用命令創建索引

      ###索引名為 index-demo,類型為test
      [root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
      {
        "_index" : "index-demo",
        "_type" : "test",
        "_id" : "1",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 2,
          "failed" : 0
        },
        "created" : true				"創建成功"
      }
      
      本地瀏覽器
      http://192.168.100.140:9100/	"刷新"
      http://192.168.100.150:9100/	
      

      mark

      mark

    5.4: 部署Logstash(Apache服務器上部署)

    • 部署apache服務,以及安裝Logstash

      #部署apache服務,以及安裝Logstash
      1、安裝Apahce服務(httpd)
      yum -y install httpd
      systemctl start httpd
      netstat -ntap|grep httpd
      2、安裝Java環境
      java -version        ###如果沒有裝 安裝yum -y install java
      openjdk version "1.8.0_181"
      OpenJDK Runtime Environment (build 1.8.0_181-b13)
      OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
       
      3、安裝logstash
      上傳logstash-5.5.1.rpm到/opt目錄下
      [root@apache ~]# mount.cifs //192.168.31.224/redhat7 /mnt
      Password for root@//192.168.31.224/redhat7:  ******
      [root@apache ~]# cd /mnt/elk
      [root@apache elk]# ls
      elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm
      elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
      kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
      
      rpm -ivh logstash-5.5.1.rpm                                                  ##安裝logstash
      systemctl start logstash.service                                              ##啟動logstash
      systemctl enable logstash.service
      systemctl status logstash.service
      ln -s /usr/share/logstash/bin/logstash /usr/local/bin/   ##建立logstash軟連接
       
      4、logstash(Apache)與elasticsearch(node)功能是否正常,做對接測試####
      Logstash這個命令測試
      字段描述解釋:
      	-f  通過這個選項可以指定logstash的配置文件,根據配置文件配置logstash
      	-e  后面跟著字符串 該字符串可以被當做logstash的配置(如果是” ,則默認使用stdin做為輸入、stdout作為輸出)
      	-t  測試配置文件是否正確,然后退出
       
      '//輸入采用標準輸入 輸出采用標準輸出,進行測試'
      [root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
      ...省略內容
      2020-09-14T13:52:29.177Z apache 
      www.baidu.com	"輸入網址"
      2020-09-14T13:52:59.360Z apache www.baidu.com
      www.sina.com.cn	"輸入網址"
      2020-09-14T13:53:16.215Z apache www.sina.com.cn
      www.taobao.com
      2020-09-14T13:53:30.410Z apache www.taobao.com
      www.suning.com
      2020-09-14T13:53:36.695Z apache www.suning.com
      
      '//都沒問題,可以Ctrl + c取消了'
      
      '//測試:使用rubydebug顯示詳細輸出,codec為一種編解碼器'
      [root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
      ...省略內容
      The stdin plugin is now waiting for input:
      21:54:29.927 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
      www.baidu.com	"輸入網址"
      {
          "@timestamp" => 2020-09-14T13:55:00.234Z,
            "@version" => "1",
                "host" => "apache",
             "message" => "www.baidu.com"
      }
      www.suning.com	"輸入網址"
      {
          "@timestamp" => 2020-09-14T13:55:15.182Z,
            "@version" => "1",
                "host" => "apache",
             "message" => "www.suning.com"
      }
      
      '//沒問題,可以Ctrl + c取消了'
      
      5. 使用logstash將信息寫入elasticsearch中' "主節點的地址"
      [root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.140:9200"] } }'
      ...省略內容
      21:58:09.312 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
      www.baidu.com	"輸入網址"
      www.sina.com.cn
      www.suning.com 
      '//沒問題,可以Ctrl + c取消了'
      
      6.宿主機瀏覽器訪問node1節點,查看索引信息
      http://192.168.100.140:9100/
      http://192.168.100.150:9100/
      
    • 在物理機上訪問elasticsearch集群是否記錄這個日志

      mark

    • 使得Logstash與elasticsearch做對接設置

      Logstash配置文件主要由三部分組成:input、output、filter(根據需要)
       
      [root@apache opt]# chmod o+r /var/log/messages
      [root@apache opt]# ll /var/log/messages
      -rw----r--. 1 root root 572555 4  16 23:50 /var/log/messages
       
      [root@apache opt]# vi /etc/logstash/conf.d/system.conf 
      input {
             file{
              path => "/var/log/messages"
              type => "system"
              start_position => "beginning"
              }
            }
      output {
              elasticsearch {
                hosts => ["192.168.100.140:9200"]		"主節點的地址"
                index => "system-%{+YYYY.MM.dd}"
                }
              }
      [root@apache conf.d]# cd
       
      [root@apache ~]# systemctl restart logstash.service
      
      #測試登錄192.168.100.140:9100,連接192.168.100.140:9200 查看是否有system的索引
      

      mark

    5.6: 部署kilbana(node1上部署)

    • 在node1主機安裝kibana,提供日志分析功能

      #在node1主機安裝kibana,提供日志分析功能,也可以單獨開一個節點安裝
      [root@node1 ~]# mount.cifs  //192.168.31.224/redhat7 /mnt
      [root@node1 ~]# cd /mnt/elk
      [root@node1 elk]# rpm -ivh kibana-5.5.1-x86_64.rpm
      [root@node1 elk]# cd /etc/kibana/
      [root@node1 kibana]# cp kibana.yml kibana.yml.bak
      [root@node1 kibana]# vi kibana.yml
      2)server.port: 5601                #### kibana打開的端口
      7)server.host: "0.0.0.0"           ####kibana偵聽的地址
      21)elasticsearch.url: "http://192.168.100.140:9200"             ###和elasticsearch建立聯系
      30)kibana.index: ".kibana"              ####在elasticsearch中添加.kibana索引
      [root@node1 kibana]# systemctl start kibana.service    ###啟動kibana服務
      [root@node1 kibana]# systemctl enable kibana.service   ###開機啟動kibana服務
       
      [root@node1 kibana]# netstat -natp | grep 5601
      tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      84119/node          
      [root@node1 kibana]# 
      
      #登錄且創建索引,注意:這里的索引,必須是elasticsearch集群中存在的索引才能在kilbana中創建
      測試//192.168.100.140:5601
      

      mark

      mark

    • 對接Apache主機的Apache 日志文件(access.log和error.log)

      [root@apache opt]# cd /etc/logstash/conf.d/
      [root@apache conf.d]# touch apache_log.conf
      [root@apache conf.d]# vi apache_log.conf
      input {
             file{
              path => "/etc/httpd/logs/access_log"
              type => "access"
              start_position => "beginning"
              }
             file{
              path => "/etc/httpd/logs/error_log"
              type => "error"
              start_position => "beginning"
              }
              
            }
      output {
              if [type] == "access" {
              elasticsearch {
                hosts => ["192.168.100.140:9200"]
                index => "apache_access-%{+YYYY.MM.dd}"
                }
              }
              if [type] == "error" {
              elasticsearch {
                hosts => ["192.168.100.140:9200"]			"主節點的地址"
                index => "apache_error-%{+YYYY.MM.dd}"
                }
              }
              }
       
      [root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf	'//指定配置文件做測試'	
      					
      
    • 登錄192.168.100.140:9200,在elasticsearch集群中查看是否存在,這兩個索引
      先訪問下apache刷新幾次 192.168.100.160:80再查看192.168.100.140:9200
      索引里會產生access和error兩個日志

      mark

    • 登錄192.168.100.140:5601,進入kibana中建立索引
      建立apache_access和apache_error兩個索引,并查看索引內容

      mark

      mark

      mark

      mark

      點擊discover

      mark

      mark

    mark

    版權聲明:本文為LPFAM原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/LPFAM/article/details/108607353

    智能推薦

    914. 卡牌分組(簡單)- LeetCode

    題目描述 自己解法 遍歷數組計數,求出最小牌數,根據最小牌數求出它的所有因數,再遍歷檢查即可 時間復雜度O(n)O(n)O(n) 空間復雜度O(n)O(n)O(n) 官方解答 求出最大公約數,再判斷是否大于2即可,具體參考:官方解答。...

    jersey訪問路徑是如何匹配并訪問的(一)

    上周同事遇到了一個問題,就是明明路徑存在,但是卻報出404未找到路徑,但是不是所有的路徑都404,網上查了很多關于jersey的資料,好像也沒說全,這次就自己查看一下源碼,看看它到底是怎么去匹配的。 舉一個例子: http:127.0.0.1:8080/dsj/dsjql/v1/UnittypeCount/getList能訪問成功; http:127.0.0.1:8080/dsj/dsjql/v1...

    MINIO分布式集群搭建

    搭建分布式集群 使用docker-compose 中文文檔:https://docs.min.io/cn/deploy-minio-on-docker-compose.html Docker Compose允許定義和運行單主機,多容器Docker應用程序。 使用Compose,您可以使用Compose文件來配置MinIO服務。 然后,使用單個命令,您可以通過你的配置創建并啟動所有分布式MinIO實...

    LINUX設備驅動模型分析之五 總線-設備-驅動模塊總結

    前面幾篇文章我們對bus-device-driver模型進行了單獨介紹,本篇文章我們對這三部分進行總結,同時對之前文章中未細化的部分進行詳細說明。 bus-device-driver相關結構體關聯 如下圖是包含bus-device-driver的關聯圖,我們根據該流程圖再次進行一下說明。   1.devices_kset集合說明 內核系統中在device模塊的初始化接口中,創建了一個ks...

    猜你喜歡

    python 爬蟲實踐 (爬取鏈家成交房源信息和價格)

    簡單介紹 pi: 簡單介紹下,我們需要用到的技術,python 版本是用的pyhon3,系統環境是linux,開發工具是vscode;工具包:request 爬取頁面數據,然后redis 實現數據緩存,lxml 實現頁面數據的分析,提取我們想要的數據,然后多線程和多進程提升爬取速度,最后,通過celery 框架實現分布式爬取,并實際部署下,下面就按這個邏輯順序,進行介紹 request爬取頁面數據...

    從NIO編程到Netty的使用

    我們在網絡編程——NIO編程中,就曾介紹過直接使用NIO進行編程,這里我們介紹下如何使用Netty框架,來完成我們之前直接使用NIO完成的功能,就是一個簡單的客戶端和服務端的通信。 在這之前,我們先來簡單了解一下Netty框架的核心組件: Channel Channel 是Java NIO 的一個基本構造。它代表一個到實體(如一個硬件設備、一個文件、一個網絡套接字或者一個能...

    小魚的Pytorch撞墻到撞墻墻到撞墻墻墻的精通之路二:自動微分

    自動微分篇 autograd requires_grad && grad_fn tensor.backward && tesnor.grad 總結&&參考文獻 基于官方教程,記載小魚的個人理解,記錄些許項目,以及不斷遇到的離奇的bug及殺蟲方法。 autograd autograd是pytorch之中的一個核心計算,提供了自動計算微分、跟蹤微分過程、...

    spring cloud + nacos入門案列

    一:簡介    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud并沒有重復制造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通...

    布局篇之圣杯布局

    圣杯布局的想法就是:外層盒子有中的子盒子都浮動起來,然后先把main固定住,利用margin留出一定空間,再將其他盒子利用marign:-xx%,以及position:relative(可能會用到)進行位置調整。 這里先說一下兩列自適應的。 就是上面這個效果。綠色的是main,紅色的是aside。這里因為只用到了.main:”margin-left”屬性給asdie留出左側...

    精品国产乱码久久久久久蜜桃不卡