Fluentd輸入插件(input)
1、輸入插件(Input Plugin)概述
Fluentd有6種插件Input, Parser, Filter, Output, Formatter and Buffer.
本文概述了輸入(input)插件。
1.1、概述
輸入插件擴展了Fluentd來從外部檢索和拉事件日誌。一個輸入插件通常會創建一個線程套接字和一個監聽套接字。它也可以被寫入定期從數據源提取數據。
1.2、輸入插件列表
in_forward
in_unix
in_http
in_tail
in_exec
in_syslog
1.3、其他輸入(Input)插件
請參閱此插件列表,以了解其他輸入插件。
Fluentd plugins
2、UDP 輸入(Input)插件
Advertisements
in_udp輸入插件使Fluentd能夠接受UDP有效載荷(payload)。
2.1、示例配置
in_udp包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type udptag mytag # requiredformat /^(?<field1>\d+):(?<field2>\w+)$/ # requiredport 20001 # optional. 5160 by defaultbind 0.0.0.0 # optional. 0.0.0.0 by defaultbody_size_limit 1MB # optional. 4096 bytes by default</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
Advertisements
2.2、參數
@type (required必須)
該值必須是udp。
tag (required必須)
輸出事件tag(標籤)。
port埠
監聽埠。默認值= 5160
bind(綁定)
要綁定的地址。 默認值= 0.0.0.0
source_hostname_key
客戶端主機名的欄位名稱。 如果設置該值,客戶端的主機名將被設置為其密鑰。 默認值為nil(不添加主機名)。
如果設置以下配置:
source_hostname_key client_host
那麼客戶端的主機名設置為client_host欄位。
{..."foo": "bar","client_host": "client.hostname.org"}
格式 (required必須)
UDP有效載荷的格式。 in_udp使用解析器插件來解析有效載荷。 有關詳細信息,請參閱解析器文章。
UDP payload的格式。 in_udp使用解析器插件 parser article來解析有效載荷。 有關詳細信息,請參閱解析器文章。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
2.3、常見問題
如何防止請求刪除?
如果in_udp在1秒內大量發送數據包,則會刪除一些數據包。例如,你可以通過netstat - su看到更大的RcvbufErrors號碼。
這意味著使用一個進程的in_udp無法處理這樣的流量。嘗試使用fluent -plugin- multiprocess來解決這個問題。參見第1334號問題,了解更多細節。
3、TCP 輸入(Input)插件
in_tcp輸入插件使Fluentd能夠接受TCP有效載荷(payload)。
不要使用此插件從客戶端庫接收日誌。 對於這種情況使用in_forward。
3.1、示例配置
in_tcp包含在Fluentd的核心中。 不需要額外的安裝過程。
<source>@type tcptag tcp.events # requiredformat /^(?<field1>\d+):(?<field2>\w+)$/ # requiredport 20001 # optional. 5170 by defaultbind 0.0.0.0 # optional. 0.0.0.0 by defaultdelimiter \n # optional. \n (newline) by default</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
3.2、參數
@type (required必須)
該值必須是tcp。
tag (required必須)
輸出事件tag(標籤)。
port埠
監聽埠。默認值= 5170
bind(綁定)
要綁定的地址。 默認值= 0.0.0.0
分隔符(delimiter)
payload被讀取到這個字元。默認情況下,它是「\ n」。
source_hostname_key
客戶端主機名的欄位名稱。 如果設置該值,客戶端的主機名將被設置為其密鑰。 默認值為nil(不添加主機名)。
如果設置以下配置:
source_hostname_key client_host
那麼客戶端的主機名設置為client_host欄位。
{..."foo": "bar","client_host": "client.hostname.org"}
3.3、格式format(必須)
TCP有效載荷的格式。 這是正則表達式的例子。(\d是匹配數字 \w是匹配字母)
format /^(?<field1>\d+):(?<field2>\w+)$/
如果你執行下面的命令:
$ echo '123456:awesome' | netcat 0.0.0.0 5170
然後得到如下解析結果:
{"field1":"123456","field2":"awesome}
in_tcp使用解析器(parser)插件解析負載。有關詳細信息,請參見解析器文章。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
4、forward Input Plugin(轉發輸入插件)
in_forward輸入插件偵聽TCP套接字以接收事件流。它還偵聽一個UDP套接字來接收heartbeat消息。
此插件主要用於接收來自其他Fluentd實例、fluent-cat命令或客戶端庫的事件日誌。這是迄今為止檢索記錄的最有效的方法。
在沒有安全連接的情況下,不要使用這個插件進行交流或公共互聯網數據傳輸。為了提供可靠/低延遲傳輸,我們假設這個插件只在私有網路中使用。
如果您打開這個插件的埠到internet,攻擊者可以使用特定的數據包輕鬆地崩潰。如果需要在節點之間建立安全連接,請考慮使用in_secure_forward。
4.1、實例配置
in_forward包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type forwardport 24224bind 0.0.0.0</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
4.2、參數
@type (required必須)
該值必須是forward。
port埠
監聽埠。默認值= 24224
bind(綁定)
要綁定的地址。 默認值= 0.0.0.0
linger_timeout(延遲超時)
用於設置linger選項的超時時間。 默認值為0
chunk_size_limit(塊大小限制)
接收塊的大小限制。如果塊大小大於該值,則接收到的塊被丟棄。默認值為nil(無限制)。
chunk_size_warn_limit(塊大小警告限制)
接收到的塊的警告大小限制。如果塊大小大於此值,將發送一條警告消息。默認值為nil(無警告)。
skip_invalid_event (v0.12.20 or later)(跳過無效事件(v0.12.20或更高版本)
如果傳入事件無效,跳過事件。 默認值為false。
這個選項在forwarder上是有用的,而不是aggragator。v0.12.20或更高版本。
source_hostname_key源主機名密鑰(v0.12.28或更高版本)
客戶機主機名的欄位名。如果設置值,將設置客戶機的主機名。默認值為nil(沒有添加主機名)。
這個迭代傳入的事件。因此,如果向in_forward發送較大的塊,則需要額外的處理時間。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
4.3、協議
此插件接受JSON或MessagePack消息,並自動檢測使用哪個消息。 在內部,Fluent使用MessagePack,因為它比JSON更有效率。
時間值是平台特定的整數,它基於Ruby的Time.now.to_i函數的輸出。 在Linux,BSD和MAC系統上,這是1970年以來的秒數。
可以在同一連接中發送多個消息。
stream:message...message:[tag, time, record]or[tag, [[time,record], [time,record], ...]]example:["myapp.access", 1308466941, {"a":1}]["myapp.messages", 1308466942, {"b":2}]["myapp.access", [[1308466941, {"a":1}], [1308466942, {"b":2}]]]
4.4、常見問題
為什麼in_forward沒有標籤(tag)參數?
in_forward使用傳入事件的標籤(tag),因此沒有固定的標籤參數。 見上文「協議」部分。
如何解析(parse)傳入的事件?
in_forward不像in_tail或in_tcp那樣提供解析(parse)機制,因為in_forward主要是為了有效的日誌傳輸。 如果要解析傳入事件,請在管道中使用解析器過濾器。
參見Docker日誌記錄驅動程序usecase:Docker Logging
我收到MessagePack::UnknownExtTypeError錯誤。 為什麼?
當轉發器(forward)的Fluentd為v0.14且接收者的Fluentd為0.12時,會出現此錯誤。為了避免此問題,請在v0.14Fluentd中將time_as_integer設置為out_forward設置。
5、in_secure_forward(安全的轉發輸入插件)
in_secure_forward輸入插件通過身份驗證通過SSL接受消息(參見out_secure_forward)。
本文檔不描述所有參數。 如果您想了解全部功能,請查看「進一步閱讀」部分。
5.1、安裝
in_secure_forward不包括在td-agent包或fluentd gem中。為了安裝它,請參閱插件管理文章。
5.2、實例配置
本節提供了in_secure_forward的一些示例配置。
極簡配置
首先,通過secure-forward-ca-generate生成私有CA文件,然後以安全的方式(scp或其他方式)將該文件複製到輸出插件端.
<source>@type secure_forwardshared_key secret_stringself_hostname server.fqdn.local # This fqdn is used as CN (Common Name) of certificatessecure trueca_cert_path /path/to/certificate/ca_cert.pemca_private_key_path /path/to/certificate/ca_key.pemca_private_key_passphrase passphrase_for_private_CA_secret_key</source>
從客戶端檢查用戶名/密碼
<source>@type secure_forwardshared_key secret_stringself_hostname server.fqdn.localsecure trueca_cert_path /path/to/certificate/ca_cert.pemca_private_key_path /path/to/certificate/ca_key.pemca_private_key_passphrase passphrase_for_private_CA_secret_keyauthentication yes # Deny clients without valid username/password<user>username tagomorispassword foobar012</user><user>username frsyukipassword yakiniku</user></source>
拒絕未知的源IP /主機
<source>@type secure_forwardshared_key secret_stringself_hostname server.fqdn.localsecure trueca_cert_path /path/to/certificate/ca_cert.pemca_private_key_path /path/to/certificate/ca_key.pemca_private_key_passphrase passphrase_for_private_CA_secret_keyallow_anonymous_source no # Allow to accept from nodes of <client><client>host 192.168.10.30# network address (ex: 192.168.10.0/24) NOT Supported now</client><client>host your.host.fqdn.local# wildcard (ex: *.host.fqdn.local) NOT Supported now</client></source>
您可以一起使用用戶名/密碼檢查和客戶端檢查:
<source>@type secure_forwardshared_key secret_stringself_hostname server.fqdn.localsecure trueca_cert_path /path/to/certificate/ca_cert.pemca_private_key_path /path/to/certificate/ca_key.pemca_private_key_passphrase passphrase_for_private_CA_secret_keyallow_anonymous_source no # Allow to accept from nodes of <client>authentication yes # Deny clients without valid username/password<user>username tagomorispassword foobar012</user><user>username frsyukipassword sukiyaki</user><user>username repeatedlypassword sushi</user<client>host 192.168.10.30 # allow all users to connect from 192.168.10.30</client><client>host 192.168.10.31users tagomoris,frsyuki # deny repeatedly from 192.168.10.31</client><client>host 192.168.10.32shared_key less_secret_string # limited shared_key for 192.168.10.32users repeatedly # and repeatedly only</client></source>
安全Sender-Receiver設置
請參考安全的發送者設置示例文檔。
5.3、參數
@type
此參數是必需的。它的值必須secure_forward。
port (integer整數)
默認值為24284
bind (string)
默認值是0.0.0.0
secure (bool)
表示已發布的連接是安全的。如果需要安全加密,請指定yes(或true)。
self_hostname (string)
自動生成的證書的默認值(CN)。
shared_key (string)
節點之間共享密鑰。
allow_keepalive (bool)
接受keepalive連接。默認值為true。
allow_anonymous_source (bool)
接受來自未知主機的連接。
authentication (bool)
需要密碼身份驗證。默認值為false。
ca_cert_path (string)
私有CA證書文件的路徑,這是使用私有CA所需的。 (對於安全的yes配置,需要其中一個參數或cert_path。)
ca_private_key_path (string)
私有CA證書密鑰文件的私鑰路徑。
ca_private_key_passphrase (string)
私有密鑰文件的passphrase字元串,由ca_private_key_path指定。
read_length (size)
每個非阻塞讀取的位元組數。默認值為8MB = 810241024位元組。
read_interval_msec (integer)
非阻塞讀取之間的間隔,以毫秒為單位。默認值是50。
socket_interval_msec (integer)
SSL之間的間隔以毫秒為單位。默認值是200。
進一步的閱讀
fluent-plugin-secure-forward repository
6、http Input Plugin
in_http輸入插件可以使Fluentd從HTTP POST中檢索記錄。 URL路徑成為Fluentd事件日誌的標籤(tag),所發布(POSTed)的body元素將成為記錄本身。
6.1、示例配置
in_http包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type httpport 8888bind 0.0.0.0body_size_limit 32mkeepalive_timeout 10s</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
使用示例
下面的示例使用curl命令發布一個記錄。
$ curl -X POST -d 'json={"action":"login","user":2}'http://localhost:8888/test.tag.here;
6.2、參數
@type (required)
這個值必須是http
port
埠監聽,默認是9880
bind
地址綁定 默認是0.0.0.0
body_size_limit
POSTed元素的大小限制。 默認值= 32MB
keepalive_timeout
保持連接活動的超時限制。 默認值= 10秒
add_http_headers
在記錄中添加http_prefix頭。默認的是假的
add_remote_addr
添加REMOTE_ADDR欄位到記錄。REMOTE_ADDR的值是客戶機的地址。默認的是假的
如果您的系統在請求中設置了多個X-Forwarded-For,那麼in_http將使用第一個。例如:
X-Forwarded-For: host1, host2X-Forwarded-For: host3
如果發送到多個header,REMOTE_ADDR值是host1。
cors_allow_origins
CORS的白名單域名。 默認是沒有檢查。
如果您將[「domain1」,「domain2」]設置為cors_allow_origins,則in_http將返回403以從該域訪問。
format格式
HTTP主體的格式。預設值是默認。
default
接受records使用json= / msgpack= style
regexp
通過正則表達式指定主體格式。
format /^(?<field1>\d+):(?<field2>\w+)$/
如果執行以下命令:
$ curl -X POST -d '123456:awesome' "http://localhost:8888/test.tag.here"
然後解析結果如下面:
{"field1":"123456","field2":"awesome}
還支持json,ltsv,tsv,csv和none。 檢查解析器插件概述了解更多詳細信息。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
6.3、附加特性
時間查詢參數
如果要從應用程序傳遞事件時間,請使用time query參數。
$ curl -X POST -d 'json={"action":"login","user":2}'"http://localhost:8888/test.tag.here?time=1392021185"
批處理模式
如果使用默認格式,則可以將json / msgpack的數組類型發送到in_http。
$ curl -X POST -d 'json=[{"action":"login","user":2,"time":1392021185},{"action":"logout","user":2,"time":1392027356}]'http://localhost:8888/test.tag.here;
這通過減少HTTP訪問來提高輸入性能。非默認格式還不支持批處理模式。這是一個簡單的bechmark結果,在MacBook Pro與ruby 2.3:
json | msgpack | msgpack array(10 items) |
---|---|---|
2100 events/sec | 2400 events/sec | 10000 events/sec |
測試的配置和ruby腳本在這裡。
6.4、常見問題
為什麼in_http從我的日誌中刪除「+」?
這是HTTP規範,不是Fluentd的問題。 您需要正確編碼您的有效載荷或使用多部分請求。 這是ruby的例子:
# OKURI.encode_www_form({json: {"message" => "foo+bar"}.to_json})# NG"json=#{{"message" => "foo+bar"}.to_json}"
curl命令示例:
# OKcurl -X POST -H 'Content-Type: multipart/form-data' -F 'json={"message":"foo+bar"}' http://localhost:8888/test.tag.here# NGcurl -X POST -F 'json={"message":"foo+bar"}' http://localhost:8888/test.tag.here
7、Unix Domain Socket Input Plugin
in_unix輸入插件可以使Fluentd從Unix域套接字中檢索記錄。 有線協議與in_forward相同,但傳輸層不同。
7.1、示例配置
in_unix被包括在Fluentd的core中。不需要額外的安裝過程。
<source>@type unixpath /path/to/socket.sock</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
7.2、參數
@type (required)
這個值必須是unix
path (required)
您的Unix域套接字的路徑。
backlog
Unix域套接字的backlog。默認值是1024。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
8、tail Input Plugin
in_tail輸入插件允許Fluentd從文本文件的尾部讀取事件。 它的行為類似於tail -F命令。
8.1、示例配置
in_tail包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type tailpath /var/log/httpd-access.logpos_file /var/log/td-agent/httpd-access.log.postag apache.accessformat apache2</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
它是如何工作的
當Fluentd第一次配置為in_tail時,它將從該日誌的尾部開始讀取,而不是從開始讀取。
一旦日誌被輪轉(rotated),Fluentd從一開始就開始讀取新文件。它跟蹤當前的inode號。
如果td-agent重新啟動,它將從重啟前的最後一個位置的td代理讀取開始讀取。這個位置記錄在pos_file參數指定的位置文件中。
8.2、參數
@type (required)
這個值必須是tail
tag (required)
事件的標籤
*可以作為一個佔位符,擴展到實際的文件路徑,替換「/」和「.」例如,如果您有以下配置
path /path/to/filetag foo.*
in_tail使用'foo.path.to.file'標籤發出解析事件。
path (required)
讀的路徑。可以指定多條路徑,由「,」分隔。
*和strftime格式可以包括動態添加/刪除表文件。在refresh_interval的間隔期間,Fluentd刷新了表文件。
path /path/to/%Y/%m/%d/*
如果日期是20140401,Fluentd將開始觀看 /path/to/2014/04/01目錄中的文件。 另請參見read_from_head參數。
您不應該使用「*」來進行日誌輪轉(rotation),因為它可能導致日誌複製。在這種情況下,應該分離in_tail插件配置。
exclude_path
從觀察者列表中排除文件的路徑。 例如,如果要刪除壓縮文件,可以使用以下模式。
path /path/to/*exclude_path ["/path/to/*.gz", "/path/to/*.zip"]
refresh_interval
查看文件列表刷新的間隔。默認是60秒。
limit_recently_modified
這個參數從v0.12.33開始。
在path參數中使用*時,限制修改時間在指定時間範圍內的查看文件。
skip_refresh_on_startup
這個參數從v0.12.33開始。
在啟動時跳過看列表的刷新。這減少了在路徑中使用*的啟動時間。
read_from_head
開始從文件頭讀取日誌,而不是底部。 默認值為false。
如果要使用或strftime動態路徑拖尾所有內容,請將此參數設置為true。 相反,您應該保證在目錄中不會發生日誌輪換。
當這是真的時,in_tail會嘗試在啟動階段讀取文件。如果目標文件很大,則需要很長時間,並且在讀取文件完成之前不會執行其他插件。
encoding, from_encoding
指定讀取行的編碼。預設值是ASCII-8BIT。
默認情況下,in_tail會釋放字元串值作為ascii-8bit編碼。這些選項改變它。
如果只指定編碼,那麼in_tail會改變字元串到編碼。這個用#force_encoding ruby的字元串
如果指定編碼和from_encoding,in_tail嘗試將字元串從from_編碼編碼到編碼。它使用ruby的字元串#編碼
您可以通過鍵入以下命令獲得支持的編碼列表:
$ ruby -e 'p Encoding.name_list.sort'
read_lines_limit
每個IO上的讀取行數。默認是1000行。
如果您看到「發出的數據的大小超過buffer_chunk_limit」,則使用in_tail記錄,設置較小的值。
multiline_flush_interval
為多行格式刷新緩衝區的間隔。默認是禁用的。
如果您設置了multiline_flush_interval 5s,in_tail會在5秒后刷新該事件。當使用format_firstline選項時,此選項非常有用。自從v0.12.20或更高版本。
pos_file (highly recommended強烈推薦)
這個參數非常推薦。Fluentd將記錄它最後讀到這個文件的位置。
pos_file /var/log/td-agent/tmp/access.log.pos
pos_file處理一個文件中的多個位置,因此每個源不需要多個pos_file參數。
不要在in_tail配置之間共享pos_file。 它會導致意外的行為,例如 損壞的pos_file內容。
in_tail在啟動階段刪除未跟蹤的文件位置。 這意味著當您使用動態路徑設置拖尾大量文件時,pos_file的內容正在增長,直到重新啟動。 我將來會解決這個問題。 檢查這個問題。
format (required)
日誌的格式。in_tail使用解析器插件解析日誌。有關詳細信息,請參見解析器文章。
path_key
將觀察文件路徑添加到path_key欄位。
path /path/to/access.logpath_key tailed_path
使用這個配置,生成的事件就像
{"tailed_path":"/path/to/access.log","k1":"v1",...,"kN":"vN"}.
rotate_wait
in_tail實際上比tail -F本身有點多。替換(rotating)文件時,有些數據可能仍然需要寫入舊文件,而不是新文件。
in_tail通過保留對舊文件的引用(即使在它已經被替換(rotating)之後)一段時間,完全轉換到新文件來處理這一點。 這有助於防止為舊文件指定的數據丟失。 默認情況下,此時間間隔為5秒。
rotate_wait參數接受一個整數代表你想要這個時間間隔的秒數。
enable_watch_timer
啟用額外的時鐘計時器。將此參數設置為false將顯著減少CPU和I / O消耗,因為在系統中跟蹤大量支持inotify的文件。默認值為true,將使用額外的1秒計時器。
in_tail(通過cool. io)在支持它的系統上使用inotify。早期版本的libev在某些平台上(如Mac OS X)沒有正常工作;因此,使用顯式的1秒計時器。即使在支持inotify的系統中,這也會導致每秒額外的I/O,因為每個文件都被跟蹤。
早期測試表明,現代Cool.io和in_tail正常工作,無需額外的計時器。 在將來的某個時候,根據反饋和測試,默認情況下可能會禁用附加的監視定時器。
ignore_repeated_permission_error
如果您很難將非permision文件排除在監視列表中,則將該參數設置為true。它會抑制重複的許可權錯誤日誌。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
8.3、常見問題
in_tail沒有開始讀取日誌文件,為什麼?
在默認情況下,in_tail會遵循tail - f命令行為,因此in_tail只讀取較新的日誌。如果要讀取批用例的現有行,請將read_from_head設置為true。
logrotate 設置
logrotate具有nocreate參數,並且在觸發日誌輪換后不創建新文件。 這意味著in_tail找不到新的文件尾。
此參數不適合典型的應用程序日誌情況,因此請檢查不包括nocreate參數的logrotate設置。
當in_tail接收BufferQueueLimitError時發生了什麼?
in_tail停止讀取新的行和pos文件更新,直到解決了BufferQueueLimitError。在解決了BufferQueueLimitError之後,重新開始發出新的行和pos文件更新。
9、exec Input Plugin
in_exec輸入插件執行外部程序來接收或拉事件日誌。然後它將從程序的stdout讀取TSV(tab分隔值)、JSON或MessagePack。
您可以定期或永久運行程序。要定期運行,請使用run_interval參數。
9.1、示例
in_exec包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type execcommand cmd arg argkeys k1,k2,k3tag_key k1time_key k2time_format %Y-%m-%d %H:%M:%Srun_interval 10s</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
9.2、參數
@type (required)
這個值必須是exec
command (required)
執行命令(程序)。
格式
用於將程序輸出映射到傳入事件的格式。
支持以下格式:
tsv (default)
json
msgpack
parser plugin formats, e.g. ltsv, none.
使用tsv格式時,請同時指定逗號分隔的鍵參數。
keys k1,k2,k3
當使用json格式時,此插件使用Yajl庫來解析程序輸出。 Yajl內部緩衝數據,因此輸出並不總是瞬時的。
tag(如果未指定tag_key,則為必填欄位)
輸出事件的tag。
tag_key
作為事件標記使用的key鍵,而不是事件記錄中的value值。如果未指定此參數,則將使用tag參數。
time_key
作為事件時間使用的key鍵,而不是事件記錄中的值value。如果未指定此參數,則將使用當前時間。
time_format
事件時間的格式用於time_key參數。默認情況是UNIX時間(整數)。
run_interval
周期程序運行之間的間隔時間。如果沒有指定值,命令腳本只運行一次。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
9.3、真實世界用例:使用in_exec來獲取Hacker News的頂部頁面
如果您已經有了一個定期運行的腳本(比如通過cron),您希望將輸出存儲到多個後端系統(HDFS、AWS、彈性搜索等),in_exec是一個不錯的選擇。
腳本的惟一要求是輸出TSV、JSON或MessagePack。
例如,下面的腳本刮掉了Hacker News的首頁,並收集了關於每個帖子的信息:
require 'nokogiri'require 'open-uri'require 'json'class HNParseError < RuntimeError; end$stdout.sync = trueurl = "https://news.ycombinator.com"parsed = Nokogiri::HTML(open(url))titles = parsed.css("td.title > a:first")subtexts = parsed.css("td.subtext")if titles.length != 31 or subtexts.length != 30raise HNParseErrorendtitles = titles[0..29]capture_time = Time.now.to_ititles = titles.each_with_index.map { |title, ii|{ "time" => capture_time,"rank" => ii + 1,"title" => title.text}}subtexts = subtexts.map { |subtext|subtext_text = subtext.texthiring_notice = falsebeginunique_id = subtext.css("a:last").attr('href')rescueunique_id = ""hiring_notice = trueendmatch = /(?<points>\d+) points? by (?<user_name>[^ ]+) (?<duration>[^|]+)[^\d]*(?<num_comments>\d+) comments?/.match(subtext_text)match = /(?<points>\d+) points? by (?<user_name>[^ ]+) (?<duration>[^|]+)/.match(subtext_text) if not matchif matchpoints = match["points"]user_name = match["user_name"]duration = match["duration"]beginnum_comments = match["num_comments"]rescuenum_comments = 0endelsepoints = user_name = duration = num_comments = ""end{ "points" => points.to_i,"user_name" => user_name,"duration" => duration,"num_comments" => num_comments.to_i,"unique_id" => unique_id,"hiring_notice" => hiring_notice}}for ii in 0..29puts (titles[ii].merge subtexts[ii]).to_jsonend
假設該腳本被稱為hn.rb。 然後,您可以使用以下配置每5分鐘運行一次
<source>@type execformat jsontag hackernewscommand ruby /path/to/hn.rbrun_interval 5m # don't hit HN too frequently!</source><match hackernews>@type stdout</match>
如果您運行Fluentd,您將看到以下輸出(如果您不耐煩,ctrl-C刷新stdout緩衝區)
2014-05-26 21:51:35 +0000 hackernews: {"time":1401141095,"rank":1,"title":"Rap Genius Co-Founder Moghadam Fired","points":128,"user_name":"obilgic","duration":"2 hours ago ","num_comments":108}2014-05-26 21:51:35 +0000 hackernews: {"time":1401141095,"rank":2,"title":"Whitewood Under Siege: Wooden Shipping Pallets","points":128,"user_name":"drjohnson","duration":"3 hours ago ","num_comments":20}2014-05-26 21:51:35 +0000 hackernews: {"time":1401141095,"rank":3,"title":"Organic Cat Litter Chief Suspect In Nuclear Waste Accident","points":55,"user_name":"timr","duration":"2 hours ago ","num_comments":12}2014-05-26 21:51:35 +0000 hackernews: {"time":1401141095,"rank":4,"title":"Do We Really Know What Makes Us Healthy? (2007)","points":27,"user_name":"gwern","duration":"1 hour ago ","num_comments":9}
當然,您可以使用Fluentd的許多輸出插件將數據存儲到各種後端系統,如Elasticsearch,HDFS,MongoDB,AWS等。
10、syslog Input Plugin
in_syslog輸入插件使Fluentd可以通過UDP或TCP上的syslog協議檢索記錄。
10.1、示例
in_syslog包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type syslogport 5140bind 0.0.0.0tag system</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
使用示例
檢索的數據組織如下。 Fluentd的標籤由tag參數(標籤前綴),設備級別和優先順序生成。 該記錄由正則表達式解析。
tag = "#{@tag}.#{facility}.#{priority}"record = {"pri": "0","time": 1353436518,"host": "host","ident": "ident","pid": "12345","message": "text"}
10.2、參數
@type (required)
這個值必須是syslog
tag (required)
tag的前綴。 標籤本身由標籤前綴,設備級別和優先順序生成。
port
埠監聽,默認是5140
bind
監聽的地址,默認是0.0.0.0
protocol_type
用於接收日誌的傳輸協議。 支持「udp」和「tcp」。 「udp」默認。
message_length_limit
syslog消息的最大位元組數。 默認值為2048.如果發送較大的消息,請更改此參數。
message_format
此參數自v0.12.33可用。
指定協議格式。 支持的值為rfc3164,rfc5424和auto。 默認值為rfc3164。 如果您的系統日誌使用rfc5424,請改用rfc5424。
這是一個消息的例子:
# rfc3164<6>Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Hello!# rfc5424<16>1 2017-02-28T12:00:00.009Z 192.168.0.1 fluentd - - - Hello!
當in_syslog收到每個源的rfc3164和rfc5424消息時,auto是有用的。 in_syslog通過使用消息前綴檢測消息格式並進行解析。
格式
日誌的格式。 此選項用於使用解析器(parse)插件解析非標準的syslog格式
<source>@type syslogtag systemformat FORMAT_PARAMETER</source>
您的format
正則表達式不應該考慮日誌的'priority'前綴。 例如,如果在syslog中收到以下日誌:
<1>Feb 20 00:00:00 192.168.0.1 fluentd[11111]: [error] hogehoge
那麼格式解析器會收到以下日誌:
Feb 20 00:00:00 192.168.0.1 fluentd[11111]: [error] hogehoge
如果缺少format參數,則假定日誌數據具有規範的syslog格式(請參閱with_priority)。
with_priority
此選項僅在格式不存在時有效。 如果with_priority為true,則假定syslog消息以「<3>」為優先標記。 存在此選項,因為某些syslog守護程序在消息正文之前輸出沒有優先順序標籤的日誌。
如果要解析任意格式的syslog消息,建議使用in_tcp或in_udp。
include_source_host
如果為true,請將源主機添加到事件記錄。 默認值為false。 這是不推薦的。 使用source_hostname_key。
source_hostname_key
客戶機主機名的欄位名。如果設置值,將設置客戶機的主機名。默認值為nil(沒有添加主機名)。
priority_key
優先順序的欄位名稱。 如果設置該值,則優先順序將被設置為其鍵key。 默認值為nil(不添加優先順序)。
facility_key
設備的欄位名稱。如果設置該值,則該設施將設置為其鍵。預設值為nil(沒有添加功能)。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
10.3、TCP協議和消息分隔符
此插件假定\ n在一個TCP連接中的syslog消息之間的分隔符字元。 如果您使用protocol_type tcp在應用程序中使用syslog庫,請將\ n添加到您的syslog消息中。
See also [rfc6587.](https://tools.ietf.org/html/rfc6587#section-3.4.2
11、scribe Input Plugin
in_scribe輸入插件使Fluentd可以通過Scribe協議檢索記錄。 Scribe是Facebook開源的另一個日誌收集器守護進程。
由於Scribe最近沒有得到很好的維護,所以這個插件對於想要使用Fluentd和現有Scribe基礎架構的現有Scribe用戶很有用。
11.1、安裝
in_scribe默認包含在td-agent中。 Fluentd gem用戶將需要使用以下命令安裝流暢插件刻錄寶石。
$ fluent-gem install fluent-plugin-scribe
11.2、示例配置
<source>@type scribeport 1463bind 0.0.0.0msg_format json</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
使用示例
我們假設您已經熟悉了Scribe協議。 這個Ruby示例代碼將日誌發送到in_scribe。
Scribe的類別欄位成為Fluentd事件日誌的標籤,Scribe的消息欄位成為記錄本身。 msg_format參數指定消息欄位的格式。
11.3、參數
type (required)
這個值必須是scribe
port
埠監聽 默認是1463
bind
地址綁定默認是0.0.0.0
msg_format
消息格式可以是'text','json'或'url_param'(默認值:text)
對於json來說,Fluentd的記錄組織如下。 Scribe的消息欄位必須是表示Hash的有效JSON字元串; 否則記錄被忽略。
tag: $categoryrecord: $message
對於文本,Fluentd的記錄組織如下。 Scribe的消息可以是任意字元串,但建議使用JSON以便隨後使用分析管道。
tag: $categoryrecord: {'message': $message}
對於url_param,Fluentd的記錄組織如下。 Scribe的消息欄位必須包含具有URL編碼的URL參數樣式鍵值對(例如key1 = val1&key2 = val2)。
tag: $url_paramrecord: {$key1: $val1, $key2: $val2, ...}
is_framed
指定是否使用Thrift的框架協議(默認值為true)。
server_type
選擇伺服器架構。 選項是「simple」,「threaded」,「thread_pool」或「nonblocking」(默認值:nonblocking)。
add_prefix
將始終添加到標籤的前綴字元串(默認值:nil)。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
12、Multiprocess Input Plugin
默認情況下,Fluentd僅在系統上使用單個CPU內核。 in_multiprocess輸入插件使Fluentd能夠通過產生多個子進程來使用多個CPU內核。 一個Fluentd用戶正在使用此插件來處理每天超過10億條記錄。
12.1、安裝
默認情況下,in_multiprocess不包含在td-agent中。 td-agent用戶必須手動安裝流暢插件多進程。
Fluentd: fluent-gem install fluent-plugin-multiprocess
td-agent v2: /usr/sbin/td-agent-gem install fluent-plugin-multiprocess
td-agent v1: /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-multiprocess
12.2、示例配置
<source>@type multiprocess<process>cmdline -c /etc/fluent/fluentd_child1.conf --log /var/log/fluent/fluentd_child1.logsleep_before_start 1ssleep_before_shutdown 5s</process><process>cmdline -c /etc/fluent/fluentd_child2.conf --log /var/log/fluent/fluentd_child2.logsleep_before_start 1ssleep_before_shutdown 5s</process><process>cmdline -c /etc/fluent/fluentd_child3.conf --log /var/log/fluent/fluentd_child3.logsleep_before_start 1ssleep_before_shutdown 5s</process></source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
特別是對於守護進程的Fluentd(例如:td-agent),必須指定--log
選項來放置子進程的日誌。
12.3、參數
@type (required)
這個值必須是multiprocess
graceful_kill_interval
該間隔發送信號以優雅地關閉進程(默認值:2sec)。
graceful_kill_interval_increment
當優雅的關機失敗,增加的時間(默認:3sec)。
graceful_kill_timeout
確定優雅關閉失敗的超時時間(default: 60sec).
process (required)
進程部分設置子進程的命令行參數。 此插件為每個部分創建一個子進程。
cmdline (required)
一段必須的cmdline參數
sleep_before_start
此參數設置開始進程之前的等待時間(默認值:0sec)。
sleep_before_shutdown
此參數在關閉進程之前設置等待時間(默認值:0sec)。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
13、dummy Input Plugin
in_dummy輸入插件生成虛擬事件。 它對Fluentd的測試,調試,基準測試和開始使用非常有用。
13.1、示例配置
in_dummy包含在Fluentd的core中。 不需要額外的安裝過程。
<source>@type dummydummy {"hello":"world"}</source>
請參閱配置文件文章,了解配置文件的基本結構和語法。
13.2、參數
@type (required)
這個值必須是dummy
tag (required)
該值是分配給生成的事件的標籤。
dummy (optional)
要生成的虛擬數據。 它應該是一組JSON散列或單個JSON散列。 如果它是一個數組的JSON散列,則數組中的散列按順序循環。 默認情況下,值為[{「message」:「dummy」}](即,它繼續生成具有記錄{「message」:「dummy」}的事件)。
auto_increment_key (optional, string type可選,字元串類型)
如果指定,每個生成的事件都有一個自動遞增的密鑰欄位。 例如,使用auto_increment_key foo_key,前幾個事件看起來像
2014-12-14 23:23:38 +0000 test: {"message":"dummy","foo_key":0}2014-12-14 23:23:38 +0000 test: {"message":"dummy","foo_key":1}2014-12-14 23:23:38 +0000 test: {"message":"dummy","foo_key":2}
rate (optional, integer type)
它配置每秒生成多少事件。 默認值為1。
日誌級別參數
log_level選項允許用戶為每個插件設置不同級別的日誌記錄。 支持的日誌級別有:fatal, error, warn, info, debug, and trace.
有關詳細信息,請參閱日誌文章。
14、Other Input Plugins
請參閱此可用插件列表,了解其他輸入插件。
Fluentd plugins