The http_server
helper creates an HTTP server. This helper was introduced in v1.6.0.
It supports async-http
-based server to improve the performance. If async-http
gem is not installed, this helper uses the standard webrick
server instead.
Here is an example:
require 'fluent/plugin/input'​module Fluent::Pluginclass ExampleInput < InputFluent::Plugin.register_output('example', self)​# 1. Load http_server helperhelpers :http_server​config_param :bind, :stringconfig_param :port, :integer​def startsuper​# 2. Create and start HTTP servercreate_http_server(:example_http_server, addr: @bind, port: @port, logger: log) do |serv|# Define endpoint `/hello` with GET methodserv.get('/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello!'] }endendendend
NOTE: The launched plugin itself is managed by its plugin helper which stops it automatically. No need to stop it in the stop
method.
This method is deprecated! Use http_server_create_http_server
method instead.
It creates and starts an HTTP server with the given routes defined in &block
.
title
: The name of the listening thread. Must be unique!
addr
: The address to listen to.
port
: The port to listen to.
logger
: The logger used in the server helper.
default_app
: The object to handle the requests with unregistered paths. This
object must have a #call
method or must be a Proc
object.
proto
: Protocol type. Supported values: {:tcp
, :tls
} (default: :tcp
)
tls_opts
: TLS options. Same as the Server Helper's
It creates and starts an HTTPS server with the given routes defined in &block
.
title
: The name of the listening thread. Must be unique!
addr
: The address to listen to.
port
: The port to listen to.
logger
: The logger used in the server helper.
default_app
: The object to handle the requests with unregistered paths. This
object must have a #call
method or must be a Proc
object.
tls_opts
: TLS options. Same as the Server Helper's
create_http_server(:example_http_server, addr: @bind, port: @port, logger: log) do |serv|# define POST method `/hello`serv.post('/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello!'] }​# define HEAD method `/hello`serv.head('/hello') { [200, { 'Content-Type' => 'text/plain' }, nil] }end
Request supports these following methods:
query_string
: returns query string like hoge=v1&fuga=v2
query
: returns query which is query_string
parsed by CGI.parse
body
: returns the request body
path
: returns the request path
The http_server
helper expects an array as the return value i.e.:
[${response_status}, ${headers}, ${body}]
${response_status}
should be an Integer
${headers}
should be a Hash
${body}
should be a String
or nil
Here is an example of request and response in JSON format:
create_http_server(:example_json_http_server, addr: @bind, port: @port, logger: log) do |serv|serv.post('/hello.json') do |req|body = JSON.parse(req.body)log.info(body)​[code, { 'Content-Type' => 'application/json' }, { 'status' => 'success' }.to_json]endend
​in_monitor_agent
​
If this article is incorrect or outdated, or omits critical information, please let us know. Fluentd is an open-source project under Cloud Native Computing Foundation (CNCF). All components are available under the Apache 2 License.