當前位置:
首頁 > 知識 > 開源日誌管理系統

開源日誌管理系統

最近發生了一些不可描述的故事,艱難之中換到了現在的組,主要的工作內容是數據挖掘。也終於有機會學習新的知識:Ruby和Fluentd。本文將總結開源軟體Fluentd的入門知識,包括如何安裝,配置文件語法,插件簡介等內容。Fluentd的官網內容非常詳盡,內容的組織也尤其清晰,所以網路上關於Fluentd的文檔很少。本文主要用於學習記錄,也希望能幫助到英語不好的讀者。

Overview

Fluentd是一個完全開源免費的log信息收集軟體,支持超過125個系統的log信息收集。其架構圖如圖1所示。

圖1. Fluentd架構圖

本質上,Fluentd可以分為客戶端和服務端兩種模塊。客戶端為安裝在被採集系統中的程序,用於讀取log文件等信息,並發送到Fluentd的服務端。服務端則是一個收集器。在Fluentd服務端,我們可以進行相應的配置,使其可以對收集到的數據進行過濾和處理,並最終路由到下一跳。下一跳可以是用於存儲的資料庫,如MongoDB, Amazon S3, 也可以是其他的數據處理平台,比如Hadoop。

Install

由於Fluentd的安裝較為麻煩,所以業界流行的穩定安裝版本其實是有Treasure Data公司提供的td-agent。本文將介紹的也是td-agent的安裝和使用。

官網安裝文檔介紹了針對不同系統的安裝辦法。本文介紹「Ubuntu 14.04 LTS / Trusty 64bit/32bit「系統的安裝:

curl-Lhttps://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh|sh

安裝完成之後,可運行以下的命令來啟動Fluentd服務:

$/etc/init.d/td-agentrestart$/etc/init.d/td-agentstatustd-agent(pid21678)isrunning...

通過start, stop, restart等命令可以啟動、關閉和重啟Fluentd服務。此時默認的Fluentd配置文件的目錄是/etc/td-agent/td-agent.conf文件。

Post Sample Logs via HTTP

默認情況下,/etc/td-agent/td-agent.conf文件已經對td-agent進行了基本的配置。可以接收通過HTTP Post的數據,並將其路由、寫入到/var/log/td-agent/td-agent.log中。

可嘗試通過以下curl命令來嘗試post數據。

$curl-XPOST-d json={"json":"message"} http://localhost:8888/debug.test

執行之後,可在輸出log的最後一行找到我們輸入的測試數據。

Syntax of Config

在Fluentd中,配置文件非常重要,它定義了Fluentd應該執行的操作。其語法很簡單,詳細內容可點擊配置語法。

打開/etc/td-agent/td-agent.conf文件,可以看到配置文件的具體內容。配置文件中基本會出現的配置分為以下幾種:

source: 定義輸入

match:定義輸出的目標,如寫入文件,或者發送到指定地點。

filter:過濾,也即事件處理流水線,可在輸入和輸出之間運行。

system:系統級別的設置。

label:定義一組操作,從而實現復用和內部路由。

@include:引入其他文件,和Java、python的import類似。

source

Fluentd支持多輸入。每一個輸入配置必須包含類型/type,比如tcp數據輸入,或者http類型輸入。type將指定使用的input plugin。以下的示例中就定義了兩個輸入源,一個是從24224埠進入的tcp數據流,另一個是從9880埠進入的http數據。

# Receive events from 24224/tcp# This is used by log forwarding and the fluent-cat command@type forward port 24224# http://this.host:9880/myapp.access?json={"event":"data"}@type http port 9880

Source指定的input插件將帶有 三個屬性的事件/event提交給Fluentd的引擎,完成數據的輸入。

match

Match配置了數據流的匹配規則和匹配成功後所需執行的動作,和路由表項類似。比如以下的配置中就對匹配myapp.access標籤成功的數據包執行file類型動作,將數據寫入到路徑為/var/log/fluent/access的文件中。

# Match events tagged with "myapp.access" and# store them to /var/log/fluent/access.%Y-%m-%d# Of course, you can control how you partition your data# with the time_slice_format option.@type file path /var/log/fluent/access

標準的動作有file和forward等。File表明寫入文件,而forward表明轉發到下一跳。

Match Pattern的設計與正常的正則匹配沒有區別,具體的分類如下:

此外,他們還可以混用,比如a..*等等。當標籤內,有多個匹配模式時,將支持或邏輯的匹配,即只要匹配成功人一個都執行對應的操作。比如:

Logging

Fluentd支持兩種類型的logging 配置,一種是全局的,另一種是針對插件的。

global

Plugin

支持的log的輸出級別有如下幾種:

fatal

error

warn

info

debug

trace

介紹完Config file的語法之後,我們還需要了解config file配置的對象Fluentd的Plugin/插件。

Plugin

Fluentd有5種類型的插件,分別是:

Input:完成輸入數據的讀取,由source部分配置

Parser:解析插件

Output:完成輸出數據的操作,由match部分配置

Formatter:消息格式化的插件,屬於filter類型

Buffer:緩存插件,用於緩存數據

每一個類型都包含著多種的插件,比如input類型就包含了以下幾種插件:

in_forward

in_http

in_tail

in_exec

in_syslog

in_scribe

由於篇幅限制,本文將不會對插件進行展開介紹,讀者可以自行閱讀官方文檔。

Route

Route指的是數據在Fluentd中的處理流水線,一般的流程為

input -> filter -> output

input -> filter -> output with label

即由輸入插件獲取數據,然後交給filter做處理,然後交給output插件去轉發。同時,也支持數據包/事件的重新提交,比如修改tag之後重新路由等等。

reroute event by tags

reroute event by record content

reroute event to other label

Use case

此處將選擇一個最簡單的使用案例來介紹Fluentd的使用。Fluentd收集Docker的登陸信息案例。

首先創建一個config file, 用於配置Fluentd的行為,可命名為」in_docker.conf「。

type forward port 24224 bind 0.0.0.0type stdout

然後保存文件。使用以下命令運行Fluentd。

$fluentd-cin_docker.conf

若運行成功則可見輸出信息如下所示:

$ fluentd -c in_docker.conf2015-09-01 15:07:12 -0600 [info]: reading config file path="in_docker.conf"2015-09-01 15:07:12 -0600 [info]: starting fluentd-0.12.152015-09-01 15:07:12 -0600 [info]: gem fluent-plugin-mongo version 0.7.10 2015-09-01 15:07:12 -0600 [info]: gem fluentd version 0.12.15 2015-09-01 15:07:12 -0600 [info]: adding match pattern="*.*" type="stdout"2015-09-01 15:07:12 -0600 [info]: adding source type="forward"2015-09-01 15:07:12 -0600 [info]: using configuration file:@type forward port 24224 bind 0.0.0.0@type stdout2015-09-01 15:07:12 -0600 [info]: listening fluent socket on 0.0.0.0:24224

然後啟動docker containner。如果之前沒有安裝過docker engine,請讀者自行安裝。由於docker 本身支持Fluentd收集信息,所以可以通過啟動命令來啟動Fluentd的client/客戶端。

$dockerrun--log-driver=fluentdubuntuecho"Hello Fluentd!"HelloFluentd!

以上命令中的ubuntu為一個鏡像,如果本地沒有,docker engine會自動下載,並在此鏡像上創建容器。啟動容器後,查看默認的輸出信息文件:/var/log/td-agent/td-agent.log,可在最後一行查看到輸出的信息。

總結

Fluentd是一個優秀的log信息收集的開源免費軟體,目前以支持超過125種系統的log信息獲取。Fluentd結合其他數據處理平台的使用,可以搭建大數據收集和處理平台,搭建商業化的解決方案。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PHP技術大全 的精彩文章:

你不是不努力,而是不懂選擇
API 文檔神器 Swagger 介紹及在 PHP 項目中使用
Laravel artisan optimize 源碼解讀
在laravel中使用Symfony的Crawler組件分析HTML
通過 PHP OPcache 讓你的 Laravel 應用運行速度飛起來

TAG:PHP技術大全 |

您可能感興趣

企業開源指南:開源項目管理工具
CES熱點:開源管理系統 蘇寧智慧零售成生態體系構建源動力
華為官宣「鴻蒙」手機操作系統下半年發布,系統開源取代安卓
開源的文檔在線管理系統MinDoc
每日安全資訊:開源組件漏洞影響多個 CMS 系統
開源倡導者擔憂被微軟壟斷開源系統工具
微軟宣布將內部查詢處理工具Trill開源 每日可處理兆計事件
聊聊開源消息中間件的架構和原理
企業開源指南:開源開發人員招募
3 個開源日誌聚合工具
開源鏈發布Web錢包和開源鏈瀏覽器測試版
介紹開源IaaS開源平台
開源情報搜集技術詳解
《我的世界》將逐步開源 開發團隊公開遊戲源代碼
華為宣布:鴻蒙操作系統開源,我們要打造全球的操作系統
企業開源指南:開源代碼的使用
開源軟體與中國式開源的演進
東方金科基於開源的開發平台建設之路
微軟宣布開源量子開發工具QDK,開始建設量子計算系統生態
開源等於開放?