開源日誌管理系統
最近發生了一些不可描述的故事,艱難之中換到了現在的組,主要的工作內容是數據挖掘。也終於有機會學習新的知識: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結合其他數據處理平台的使用,可以搭建大數據收集和處理平台,搭建商業化的解決方案。
點擊展開全文
※你不是不努力,而是不懂選擇
※API 文檔神器 Swagger 介紹及在 PHP 項目中使用
※Laravel artisan optimize 源碼解讀
※在laravel中使用Symfony的Crawler組件分析HTML
※通過 PHP OPcache 讓你的 Laravel 應用運行速度飛起來
TAG:PHP技術大全 |
※企業開源指南:開源項目管理工具
※CES熱點:開源管理系統 蘇寧智慧零售成生態體系構建源動力
※華為官宣「鴻蒙」手機操作系統下半年發布,系統開源取代安卓
※開源的文檔在線管理系統MinDoc
※每日安全資訊:開源組件漏洞影響多個 CMS 系統
※開源倡導者擔憂被微軟壟斷開源系統工具
※微軟宣布將內部查詢處理工具Trill開源 每日可處理兆計事件
※聊聊開源消息中間件的架構和原理
※企業開源指南:開源開發人員招募
※3 個開源日誌聚合工具
※開源鏈發布Web錢包和開源鏈瀏覽器測試版
※介紹開源IaaS開源平台
※開源情報搜集技術詳解
※《我的世界》將逐步開源 開發團隊公開遊戲源代碼
※華為宣布:鴻蒙操作系統開源,我們要打造全球的操作系統
※企業開源指南:開源代碼的使用
※開源軟體與中國式開源的演進
※東方金科基於開源的開發平台建設之路
※微軟宣布開源量子開發工具QDK,開始建設量子計算系統生態
※開源等於開放?