Fluent-Konfiguration funktioniert nicht

Fluent-Konfiguration funktioniert nicht

Ich habe Fluent mit Elasticsearch und Kibana mit Nginx eingerichtet. Ich bin der Anleitung gefolgt und wenn ich zu http:/192.168.10.25:8888 gehe, erhalte ich die folgende Meldung

400 Ungültige Anforderung. Der Parameter „json“ oder „msgpack“ ist erforderlich.

Unten ist meine fluent.conf

## built-in TCP input
## $ echo <json> | fluent-cat <tag>
<source>
  type forward
</source>
## built-in UNIX socket input
#<source>
#  type unix
#</source>

# HTTP input
# http://localhost:8888/<tag>?json=<json>
<source>
  type http
  port 8888
  bind 0.0.0.0
  body_size_limit 32m
  keepalive_timeout 10s
</source>

# collect the dmesg output
<source>
  type syslog
  port 42185
  tag system
</source>


# collect tail with: echo '{"event":"event-123","duration":2700}' >> /var/log/example.log
# Fluentd user need read permission on .log and r/w permission on .pos
<source>
  type tail
  path /var/log/example.log
  pos_file /var/log/example.log.pos # to store last read position
  tag personal.example
  format json
</source>
## File input
## read apache logs with tag=apache.access
#<source>
#  type tail
#  format apache
#  path /var/log/httpd-access.log
#  tag apache.access
#</source>

# Listen HTTP for monitoring
# http://localhost:24220/api/plugins
# http://localhost:24220/api/plugins?type=TYPE
# http://localhost:24220/api/plugins?tag=MYTAG
<source>
  type monitor_agent
  port 24220
</source>

# Listen DRb for debug
<source>
  type debug_agent
  port 24230
</source>


## match tag=apache.access and write to file
#<match apache.access>
#  type file
#  path /var/log/fluent/access
#</match>

# events stored on Elastic Search
<match personal.**>
  type elasticsearch
  logstash_format true
  flush_interval 10s # for testing
  include_tag_key true
  tag_key _key
</match>

## match tag=debug.** and dump to console
<match debug.**>
  type stdout
</match>


# match tag=system.** and forward to another fluent server
<match system.**>
  type forward
  <server>
    host 192.168.0.11
  </server>
  <secondary>
<server>
      host 192.168.0.12
    </server>
  </secondary>
</match>

## match tag=myapp.** and forward and write to file
#<match myapp.**>
#  type copy
#  <store>
#    type forward
#    buffer_type file
#    buffer_path /var/log/fluent/myapp-forward
#    retry_limit 50
#    flush_interval 10s
#    <server>
#      host 192.168.0.13
#    </server>
#  </store>
#  <store>
#    type file
#    path /var/log/fluent/myapp
#  </store>
#</match>

## match fluent's internal events
#<match fluent.**>
#  type null
#</match>

## match not matched logs and write to file
#<match **>
#  type file
#  path /var/log/fluent/else
#  compress gz
#</match>

Antwort1

Ihre Fluentd-Konfiguration funktioniert.

Die Meldung „400 Ungültige Anforderung, ‚json‘- oder ‚msgpack‘-Parameter ist erforderlich“ wird angezeigt, weil in_http erkennt, dass Ihre HTTP-Anforderung (POST oder GET) KEINEN json/msgpack-Parameter hat.

Versuchen Sie Folgendes:

curl -X POST -d 'json={"message":"hello"}'

und prüfen Sie, ob derselbe Fehler weiterhin auftritt.

Antwort2

Ich hatte genau das gleiche Problem wie Sie berichtet haben, und ich habe versucht, mitHTTPIEanstelle von curl. Wie Sie dem Dump entnehmen können, war es erfolgreich.

> http --verbose --json POST localhost:8888/tag1.tag2 json={\"foo\":\"bar\"}
POST /ciro.ciro HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 29
Content-Type: application/json
Host: localhost:9880
User-Agent: HTTPie/0.9.9

{
    "json": "{\"foo\":\"bar\"}"
}

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/plain

verwandte Informationen