Fluentd has monitor_agent plugin to expose its plugin status (buffer, queue, etc) via HTTP API: http://docs.fluentd.org/articles/monitoring
<source>
type monitor_agent
bind 127.0.0.1
port 24220
</source>
By using this you can monitor fluentd buffer information with Zabbix user-defined discovery.
#!/usr/local/bin/ruby
require 'json'
require 'open-uri'
PLUGINS_URL = "http://localhost:24220/api/plugins.json"
json = JSON.parse(open(PLUGINS_URL, 'r', &:read))
puts({
data: json['plugins'].map do |plugin|
{
"{#PLUGIN_ID}" => plugin['plugin_id'],
"{#PLUGIN_CATEGORY}" => plugin['plugin_category'],
"{#PLUGIN_TYPE}" => plugin['type'],
}
end
}.to_json)
place this in favorite location (at here /usr/bin/fluentd-zabbix-discovery
,) and define the user parameters:
UserParameter=fluentd.plugin.discovery,/usr/bin/fluentd-zabbix-discovery
UserParameter=fluentd.plugin.retry_count[*],curl -s localhost:24220/api/plugins.json| jq -r '.plugins[] | select(.plugin_id == "$1") | .retry_count'
UserParameter=fluentd.plugin.buffer_total_queued_size[*],curl -s localhost:24220/api/plugins.json| jq -r '.plugins[] | select(.plugin_id == "$1") | .buffer_total_queued_size'
UserParameter=fluentd.plugin.buffer_queue_length[*],curl -s localhost:24220/api/plugins.json| jq -r '.plugins[] | select(.plugin_id == "$1") | .buffer_queue_length'
UserParameter=fluentd.plugin.type[*],curl -s localhost:24220/api/plugins.json| jq -r '.plugins[] | select(.plugin_id == "$1") | .type'
UserParameter=fluentd.plugin.plugin_category[*],curl -s localhost:24220/api/plugins.json| jq -r '.plugins[] | select(.plugin_id == "$1") | .plugin_category'
UserParameter=fluentd.plugin.plugin_id[*],curl -s localhost:24220/api/plugins.json| jq -r '.plugins[] | select(.plugin_id == "$1") | .plugin_id'
Then you can define template like this: https://gist.github.com/sorah/cfbb39cb750f9bdbdeb2
Note that this plugin creates item using plugin_id
, so defining proper plugin_id
in fluentd's configuration is highly recommended.
<source>
@id my_favorite_input
type something
</source>
<match **>
@id my_awesome_output
type something
</match>