From 16bc92ff115e74d98116ef2fcbb7e36cc8459650 Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Wed, 6 Feb 2019 15:05:50 +0900 Subject: [PATCH] rsyslogd-aggregation: Add revised rsyslogd-aggregation article Prior article is https://www.fluentd.org/guides/recipes/rsyslogd-aggregation. Related to #566. Signed-off-by: Hiroshi Hatake --- docs/v1.0/rsyslogd-aggregation.txt | 158 ++++++++++++++++++++++ lib/toc.en.v1.0.rb | 1 + public/images/after-fluentd-rsyslogd.png | Bin 0 -> 27585 bytes public/images/before-fluentd-rsyslogd.png | Bin 0 -> 11255 bytes 4 files changed, 159 insertions(+) create mode 100644 docs/v1.0/rsyslogd-aggregation.txt create mode 100644 public/images/after-fluentd-rsyslogd.png create mode 100644 public/images/before-fluentd-rsyslogd.png diff --git a/docs/v1.0/rsyslogd-aggregation.txt b/docs/v1.0/rsyslogd-aggregation.txt new file mode 100644 index 00000000..1e488da4 --- /dev/null +++ b/docs/v1.0/rsyslogd-aggregation.txt @@ -0,0 +1,158 @@ +# Aggregating Rsyslogd Output into a Central Fluentd + +rsyslogd is a tried and true piece of middleware to collect and aggregate syslogs. + +Once aggregated into the central server (which is also running rsyslogd), the syslog data +is periodically bulk loaded into various data backends like databases, search indexers +and object storage systems. + + + +The above architecture can be improved in a few ways: + +1. **Adding a new data consumer requires scripting**: each new data source requires a data load script +that needs to be written and maintained. This means an engineering overhead that grows linearly with the +number of data consumers. +2. **Data is pulled, not pushed**: because data is pulled by data consumers and not +pushed by the aggregator rsyslogd, the scripts need to run very frequently to get fresh data. +A better alternative is to have the aggregator push data to each data consumer, but there is +no out-of-the-box way to do this with rsyslogd. + +By replacing the central rsyslogd aggregator with Fluentd addresses both 1. and 2. + + + +1. Fluentd supports many data consumers out of the box. By installing an appropriate output plugin, +one can add a new data source with a few configuration changes. +2. Fluentd pushes data to each consumer with tunable frequency and buffering settings. + +The rest of the article shows how to set up Fluentd as the central syslog aggregator to +stream the aggregated logs into Elasticsearch. + +## Prerequisites + +- A basic understanding of Fluentd and rsyslogd +- A running instance of Elasticsearch + +**In this guide, we assume we are running [td-agent](https://www.fluentd.org/download) on Ubuntu Xenial.** + +## Setup: rsyslogd + +If remote rsyslogd instances are already collecting data into the aggregator rsyslogd, +the settings for rsyslog should remain unchanged. However, if this is a brandnew setup, +start forward syslog output by adding the following line to `/etc/rsyslogd.conf` + +``` +*.* @182.39.20.2:42185 +``` + +You should replace "182.39.20.2" with the IP address of your aggregator server. Also, +there is nothing special about port 42185 (do make sure this port is open though). + +## Setup: Fluentd + +On your aggregator server, set up Fluentd. [See here](https://www.fluentd.org/download) for the details. + +``` +$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh +``` + +The Elasticsearch Output plugin is included in the latest version of td-agent. + +Next, the elasticsearch-ruby, which is Elasticsearch output plugin dependent gem, needs to be installed correspond for Elasticsearch server. To confirm running Elasticsearch server version, run + +``` +$ curl localhost:9200 +{ + "name" : "eycK1t_", + "cluster_name" : "elasticsearch_xxx", + "cluster_uuid" : "4UjvsSZRRvuSJisTu11LLQ", + "version" : { + "number" : "6.5.4", + "build_flavor" : "oss", + "...":"..." + }, + "tagline" : "You Know, for Search" +} +``` + +``` +$ td-agent-gem list | grep elasticsearch + +*** LOCAL GEMS *** + +elasticsearch (6.1.0) +elasticsearch-api (6.1.0) +elasticsearch-transport (6.1.0) +... +``` + +Then, you need to install elasticsearch-ruby 6.x when it is not installed. + +elasticsearch-ruby's compatibility is listed on [elasticsearch-ruby#compatibility](https://github.com/elastic/elasticsearch-ruby#compatibility). + +If you are using vanilla Fluentd, run + +``` +fluent-gem install fluent-plugin-elasticsearch +``` + +You might need to `sudo` to install the plugin. + +Finally, configure `/etc/td-agent/td-agent.conf` as follows. + +``` + + @type syslog + port 42185 + tag rsyslog + + + + @type copy + + # for debug (see /var/log/td-agent.log) + @type stdout + + + @type elasticsearch + logstash_format true + + @type memory + flush_interval 10s # for testing. + flush_thread_count 2 + + host YOUR_ES_HOST + port YOUR_ES_PORT + + +``` + +## Restart and Confirm That Data Flow into Elasticsearch + +Restart td-agent with `sudo systemctl restart td-agent`. Then, run `tail` against /var/log/td-agent.log. You should see the following lines: + +``` +2014-06-01 19:41:28 +0000 rsyslog.kern.info: {"host":"precise64","ident":"kernel","message":"[49851.032200] docker0: port 2(veth6091) entering disabled state"} +``` + +Then, query Elasticsearch to make sure the data is in there. For example, one can aggregate and filter data based on hostname. + +## What's Next? + +In production, you might want to remove writing output into stdout. So, use the following output configuration: + +``` + + @type elasticsearch + logstash_format true + host YOUR_ES_HOST + port YOUR_ES_PORT + + @type memory + flush_thread_count 2 # or more number upto logical cpu cores. + + +``` + +Do you wish to store rsyslogd logs into other systems? Check out other [monitoring service logs!](https://docs.fluentd.org/categories/monitoring-service-logs). diff --git a/lib/toc.en.v1.0.rb b/lib/toc.en.v1.0.rb index 33d4f32b..3d7e0fed 100644 --- a/lib/toc.en.v1.0.rb +++ b/lib/toc.en.v1.0.rb @@ -48,6 +48,7 @@ article 'splunk-like-grep-and-alert-email', 'Email Alerts like Splunk', ['Splunk', 'Alerting'] article 'parse-syslog', 'Parse Syslog Messages Robustly' article 'syslog-influxdb', 'Collect syslog data into InfluxDB' + article 'rsyslogd-aggregation', 'Aggregating Rsyslogd Output into a Central Fluentd' end category 'data-analytics', 'Data Analytics' do article 'http-to-td', 'Data Analytics with Treasure Data', ['Treasure Data', 'Hadoop', 'Hive'] diff --git a/public/images/after-fluentd-rsyslogd.png b/public/images/after-fluentd-rsyslogd.png new file mode 100644 index 0000000000000000000000000000000000000000..c18470bce02fc06a638c6767d762f5bc7e217f20 GIT binary patch literal 27585 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 aC;+(fE0x?_qGE7}R`0gat&*GeVgC!unR%!H literal 0 HcmV?d00001