Elasticsearch的基友Logstash

来源:http://www.cnblogs.com/aubin/archive/2017/12/11/8025170.html
-Advertisement-
Play Games

Logstash 是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用於日誌處理。 一、原理 Input 可以從文件中、存儲中、資料庫中抽取數據,Input有兩種選擇一個是交給Filter進行過濾、修剪。另一個是直接交給Output Filter 能夠動態地轉 ...


Logstash 是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用於日誌處理。

一、原理

  • Input
    可以從文件中、存儲中、資料庫中抽取數據,Input有兩種選擇一個是交給Filter進行過濾、修剪。另一個是直接交給Output
  • Filter
    能夠動態地轉換和解析數據。可以通過自定義的方式對數據信息過濾、修剪
  • Output
    提供眾多輸出選擇,您可以將數據發送到您要指定的地方,並且能夠靈活地解鎖眾多下游用例。

二、安裝使用

1.安裝

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.1.rpm
yum install -y ./logstash-6.0.1.rpm

2.Logstash配置文件

vim /etc/logstash/logstash.yml
path.data: /var/lib/logstash                                    # 數據存放路徑
path.config: /etc/logstash/conf.d/*.conf                        # 其他插件的配置文件,輸入輸出過濾等等
path.logs: /var/log/logstash                                    # 日誌存放路徑

3.Logstash中的JVM配置文件

Logstash是一個基於Java開發的程式,需要運行在JVM中,可以通過配置jvm.options來針對JVM進行設定。比如記憶體的最大最小、垃圾清理機制等等。這裡僅僅列舉最常用的兩個。
JVM的記憶體分配不能太大不能太小,太大會拖慢操作系統。太小導致無法啟動。

vim /etc/logstash/jvm.options                               # logstash有關JVM的配置
-Xms256m                                                    # logstash最大最小使用記憶體
-Xmx1g

4.最簡單的日誌收集配置

安裝一個httpd用於測試,配置Logstash收集Apache的accless.log日誌文件

yum install httpd
echo "Hello world" > /var/www/html/index.html               # 安裝httpd,創建首頁用於測試
vim /etc/logstash/conf.d/test.conf
input {
    file {                                                  # 使用file作為數據輸入
        path => ['/var/log/httpd/access_log']               # 設定讀入數據的路徑
        start_position => beginning                         # 從文件的開始處讀取,end從文件末尾開始讀取
    }
}
output {                                                    # 設定輸出的位置
    stdout {
        codec => rubydebug                                  # 輸出至屏幕
    }
}

5.測試配置文件

logstash是自帶的命令但是沒有再環境變數中,所以只能使用絕對路徑來使用此命令。

/usr/share/logstash/bin/logstash -t  -f  /etc/logstash/conf.d/test.conf   # 測試執行配置文件,-t要在-f前面
Configuration OK                                                          # 表示測試OK

6.啟動logstash

在當前會話運行logstash後不要關閉這個會話暫時稱其為會話1,再打開一個新的視窗為會話2

/usr/share/logstash/bin/logstash  -f  /etc/logstash/conf.d/test.conf

啟動以後在會話2中使用curl命令進行測試

curl 172.18.68.14

然後在回到之前的會話1可以看到輸出的信息

{
      "@version" => "1",
          "host" => "logstash.shuaiguoxia.com",
          "path" => "/var/log/httpd/access_log",
    "@timestamp" => 2017-12-10T14:07:07.682Z,
       "message" => "172.18.68.14 - - [10/Dec/2017:22:04:44 +0800] \"GET / HTTP/1.1\" 200 12 \"-\" \"curl/7.29.0\""
}

至此最簡單的Logstash配置就已經完成了,這裡僅僅是將收集到的直接輸出沒有進行過濾或者修剪。

三、Elasticsearch與Logstash

上面的配置時Logsatsh從日誌文件中抽取數據,然後輸出至屏幕。那麼在生產中往往是將抽取的數據過濾後輸出到Elasticsearch中。下麵講解Elasticsearch結合Logstash

Logstash抽取httpd的access.log文件,然後經過過濾(結構化)之後輸出給Elasticsearch Cluster,在使用Head插件就可以看到抽取到的數據。(Elasticsearch Cluster與Head插件搭建請查看前兩篇文章)

  • 配置Logstash

    vim /etc/logstash/conf.d/test.conf
    input {
    file {
        path => ['/var/log/httpd/access_log']
        start_position => "beginning"
    }
    }
    filter {
    grok {
        match => {
            "message" => "%{COMBINEDAPACHELOG}"
        }
    
        remove_field => "message"   
    }
    }
    output {
    elasticsearch {
        hosts => ["http://172.18.68.11:9200","http://172.18.68.12:9200","http://172.18.68.13:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
        action => "index"
        document_type => "apache_logs"
    }
    }
  • 啟動Logstash

     /usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/test.conf       # 測試配置文件
    Configuration OK
     /usr/share/logstash/bin/logstash  -f /etc/logstash/conf.d/test.conf         # 啟動Logstash
  • 測試
    每個執行10次172.18.68.14,位Logstash的地址

    curl 127.0.0.1
    curl 172.18.68.14
  • 驗證數據
    使用瀏覽器訪問172.18.68.11:9100(Elastisearch 安裝Head地址,前面文章有講)
    選擇今天的日期,就能看到一天內訪問的所有數據。

四、監控其他

  • 監控Nginx日誌
    僅僅列了filter配置塊,input與output參考上一個配置

    filter {
        grok {
                match => {
                        "message" => "%{HTTPD_COMBINEDLOG} \"%{DATA:realclient}\""
                }
                remove_field => "message"
        }
        date {
                match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
                remove_field => "timestamp"
        }
    }
  • 監控Tomcat
    僅僅列了filter配置塊,input與output參考上一個配置

    filter {
        grok {
                match => {
                        "message" => "%{HTTPD_COMMONLOG}"
                }
                remove_field => "message"
        }
        date {
                match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
                remove_field => "timestamp"
        }
    } 

五、Filebeat

現在已經搭建成在節點安裝Logstash併發送到Elasticsearch中去,但是Logstash是基於Java開發需要運行在JVM中,所以是一個重量級採集工具,僅僅對於一個日誌採集節點來說使用Logstash太過重量級,那麼就可以使用一個輕量級日誌收集工具Filebeat來收集日誌信息,Filebeat同一交給Logstash進行過濾後再Elasticsearch。這些在接下來的文章在進行講解,先放一張架構圖吧。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天練習C#的一個功能,就是將一個字元串時行翻轉顯示 如: 翻轉成為: 方法與寫法很多。 方法一: public void Reversal(string input) { string result = ""; for (int i = input.Length - 1; i >= 0; i--) ...
  • 1. 前言 WPF的本地化是個很常見的功能,我做過的WPF程式大部分都實現了本地化(不管最終有沒有用到)。通常本地化有以下幾點需求: 在程式啟動時根據 "CultureInfo.CurrentUICulture" 或配置項顯示對應語言的UI。 在程式運行時可以動態切換UI語言(無需重啟程式)。 製作 ...
  • 變數是指一塊存儲數據的記憶體空間,並且該記憶體區域的數據內容可以發生變化。 變數是必須先聲明後賦值。 基本的語法:數據類型+變數名; 變數名=數據; 簡單的使用技巧:聲明賦值簡寫 Static void Main (srring[] args) { int num1=2,num2=3; string s ...
  • 有的時候,我們要做的事情,就是簡單的重覆某個行為指定的次數。 就比如在這裡重覆輸出100個*號 在這裡,就可以使用一個for迴圈 for(i=0;i<100;i++) //定義一個i 讓它代表次數,重覆的動作就是:輸出*; 重覆次數:100; 重覆後要做的是:輸出*; { Console.Write ...
  • 匿名函數指函數定義體(即代碼塊)本身,使得函數成為所謂的“一等公民”,函數也可以像變數一樣進行賦值定義、傳遞和使用。本文還介紹了函數式編程的各種技巧,如嵌套、遞歸、高階、閉包等,站在函數式編程的頂峰,讓你感嘆“會當凌絕頂,一覽眾山小”! ...
  • Beats 平臺集合了多種單一用途數據採集器。這些採集器安裝後可用作輕量型代理,從成百上千或成千上萬台機器向 Logstash 或 Elasticsearch 發送數據。 一、架構圖 此次試驗基於前幾篇文章,需要先基於前幾篇文章搭建基礎環境。 二、安裝Filebeat 下載並安裝Filebeat 修 ...
  • 學習目標: 1:一但出發,必到達。 2:爭取在半年完成基礎學習。 3:出發目標8K,一到兩年爭取有18K-26K (會不會更高呢?) 學習制度: 五次不完成當日課程退課。 銘哥聯繫:QQ·微信·電話·不回覆黑名單。 班主任發消息:必須回覆表示收到。 必須有:課程筆記·有讓傻瓜都能看得懂的筆記。 課程 ...
  • 1.1 部署LNMP架構說明 1.1.1 LNMP架構內容 01.部署linux系統 02.部署nginx網站服務 03.部署mysql資料庫服務 04.部署php動態解析服務 1.1.2 配置LNMP架構步驟 01.配置Nginx配置文件 02.配置mysql資料庫信息(SQL語句) 03.配置w ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...