小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Fluentd輸入插件:in_http用法詳解

 RealPython 2021-03-14
in_http插件允許使用HTTP協(xié)議來采集日志事件。這個插件會建立一個支持REST風(fēng)格的HTTP端點,來接收日志事件請求。

配置示例
以下片段展示了in_http插件的簡單用法。
<source> @type http port 9880 bind 0.0.0.0 body_size_limit 32m keepalive_timeout 10s</source>

基本用法
如果已經(jīng)建立了一個使用in_http插件的Fluentd節(jié)點,我們可以通過發(fā)送post請求向這個節(jié)點發(fā)送日志記錄。比如:
# Post a record with the tag "app.log"$ curl -X POST -d 'json={"foo":"bar"}' http://localhost:9880/app.log
這里,通過uri來指定日志事件的tag,通過post消息體來傳遞日志數(shù)據(jù),
其中"json="指明了日志的封裝格式。

默認(rèn)情況下,日志事件的時間戳字段會在in_http收到日志數(shù)據(jù)后被添加上??梢酝ㄟ^在url中指定time參數(shù)來設(shè)置時間戳。比如:
# Overwrite the timestamp to 2018-02-16 04:40:37.3137116$ curl -X POST -d 'json={"foo":"bar"}' \ http://localhost:9880/test.tag?time=1518756037.3137116

下邊是另一個示例,使用js來發(fā)送日志記錄。
// Post a record using XMLHttpRequestvar form = new FormData();form.set('json', JSON.stringify({"foo": "bar"}));
var req = new XMLHttpRequest();req.open('POST', 'http://localhost:9880/debug.log');req.send(form);
我們可以看到,通過這種方式,任何基于HTTP的應(yīng)用程序都可以使用Fluentd作為日志服務(wù)。

參數(shù)說明
in_http支持通用參數(shù)。還支持以下參數(shù):
  • @type

    插件類型,取值為http。

  • port

    監(jiān)聽端口,默認(rèn)為9880.

  • bind

    監(jiān)聽的網(wǎng)卡地址,默認(rèn)為0.0.0.0,監(jiān)聽所有網(wǎng)卡。

  • body_size_limit

    POST消息體(即日志數(shù)據(jù))最大字節(jié)數(shù),默認(rèn)為32MB。

  • keepalive_timeout

    HTTP keepalive超時時長,默認(rèn)為10秒。

  • add_http_headers

    是否向日志記錄中添加HTTP_為前綴的頭部信息,默認(rèn)不添加。

  • add_remote_addr

    是否向日志記錄中添加REMOTE_ADDR字段,默認(rèn)不添加。

    如果添加,該字段的值為客戶端的ip地址。

    如果HTTP請求頭部中設(shè)置了多個X-Forwarded-For字段,in_http采用第一個X-Forwarded-For的值作為REMOTE_ADDR的值。比如:

    X-Forwarded-For: host1, host2X-Forwarded-For: host3

    這個HTTP請求頭包含了3個X-Forwarded-For,in_http取host1作為REMOTE_ADDR的值。

  • cors_allow_origins

    設(shè)置CORS域名白名單,默認(rèn)不可跨域。

    如果設(shè)置白名單,其值為一個數(shù)組,比如["domain1", "domain2"]。

    對于白名單之外的域名,in_http會返回403錯誤。

    從Fluentd v1.2.6版本,該參數(shù)取值支持通配符*,以允許接收任何域名發(fā)來的請求。比如:

    <source> @type http port 9880 cors_allow_origins ["*"]</source>
  • respond_with_empty_img

    是否使用1×1大小的圖片作為響應(yīng)消息。

    默認(rèn)使用空字符串作為響應(yīng)消息。

  • <transport>配置項

    用于配置是否使用TLS傳輸。

    <transport tls> cert_path /path/to/fluentd.crt # other parameters</transport>
  • <parse>指令

    設(shè)置用于解析輸入日志的解析器插件。

    比如:

    <source> @type http port 9880 <parse> @type regexp expression /^(?<field1>\d+):(?<field2>\w+)$/ </parse></source>

    這里使用regexp來解析輸入日志。相應(yīng)的,POST消息體中的日志格式不再是json格式。

    可以使用如下命令發(fā)送日志記錄:

    # This will be parsed into {"field1":"123456","field2":"awesome"}$ curl -X POST -d '123456:awesome' http://localhost:9880/app.log

常見問題
  • 如何以MessagePack格式發(fā)送數(shù)據(jù)到in_http?

    可以在post消息體中增加"msgpack="前綴,來指明日志數(shù)據(jù)格式為MessagePack。比如:

    # Send data in msgpack format$ msgpack=`echo -e "\x81\xa3foo\xa3bar"`$ curl -X POST -d "msgpack=$msgpack" http://localhost:9880/app.log
  • 如何使用HTTP Content-Type消息頭?

    in_http可以識別日志請求中的Content-Type消息頭,從而識別日志的封裝格式。

    比如,可以通過在HTTP消息頭中指定Content-Type為json,來發(fā)送json格式的日志而不使用"json="前綴。

    $ curl -X POST -d '{"foo":"bar"}' -H 'Content-Type: application/json' http://localhost:9880/app.log

    同樣,也可以設(shè)置Content-Type為"application/msgpack"來發(fā)送MessagePack格式的日志。

    $ msgpack=`echo -e "\x81\xa3foo\xa3bar"`$ curl -X POST -d "$msgpack" -H 'Content-Type: application/msgpack' http://localhost:9880/app.log

性能優(yōu)化
  • 使用批處理模式處理大量數(shù)據(jù)

    可以將多條日志組合為數(shù)組,通過一次HTTP請求發(fā)送到in_http接收節(jié)點

    比如:

    # Send multiple events as a JSON array$ curl -X POST -d 'json=[{"foo":"bar"},{"abc":"def"},{"xyz":"123"}]' http://localhost:9880/app.log

    這樣通過減少HTTP請求次數(shù)提高系統(tǒng)的吞吐量。

  • 壓縮數(shù)據(jù)以減少帶寬占用

    從v1.2.3開始,F(xiàn)luentd支持處理gzip格式的壓縮數(shù)據(jù)。

    可以在HTTP消息頭中通過Content-Encoding來指定數(shù)據(jù)編碼(壓縮)方式。

    # Send gzip-compressed payload$ echo 'json={"foo":"bar"}' | gzip > json.gz$ curl --data-binary @json.gz -H "Content-Encoding: gzip" http://localhost:9880/app.log

    僅此即可,不需要對Fluentd進行額外配置。

  • 多worker進程環(huán)境

    如果在多worker進程模式下使用in_http插件,這些worker進程將會監(jiān)聽相同的端口。

    <system> workers 3</system><source> @type http port 9880</source>

    這個配置中,3個worker進程會同時監(jiān)聽9880端口,輸入數(shù)據(jù)會自動在worker進程間路由。

錯誤排查

  • 為何日志中的"+"號被in_http刪除了?

    這是HTTP規(guī)范所致,并非Fluentd所為。

    應(yīng)用程序需要使用合適的編碼方式,或使用multipart請求,來避免這種情況。

    比如,可以通過如下方式發(fā)送帶"+"號的日志。

    # OKcurl -X POST -H 'Content-Type: multipart/form-data' -F 'json={"message":"foo+bar"}' http://localhost:9880/app.log
    # Badcurl -X POST -F 'json={"message":"foo+bar"}' http://localhost:9880/app.log

【如果本文對您有幫助,希望可以分享轉(zhuǎn)發(fā),或者點下“在看”】


    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多