# fluent-plugin-gcloud-pubsub-custom [![Build Status](https://travis-ci.org/mia-0032/fluent-plugin-gcloud-pubsub-custom.svg?branch=master)](https://travis-ci.org/mia-0032/fluent-plugin-gcloud-pubsub-custom) [![Gem Version](https://badge.fury.io/rb/fluent-plugin-gcloud-pubsub-custom.svg)](http://badge.fury.io/rb/fluent-plugin-gcloud-pubsub-custom) This plugin is forked from https://github.com/mdoi/fluent-plugin-gcloud-pubsub ## Overview [Cloud Pub/Sub](https://cloud.google.com/pubsub/) Input/Output(BufferedOutput) plugin for [Fluentd](http://www.fluentd.org/) with [gcloud](https://googlecloudplatform.github.io/gcloud-ruby/) gem - [Publish](https://googlecloudplatform.github.io/gcloud-ruby/docs/v0.12.2/Gcloud/Pubsub/Topic.html#publish-instance_method) messages to Cloud Pub/Sub - [Pull](https://googlecloudplatform.github.io/gcloud-ruby/docs/v0.12.2/Gcloud/Pubsub/Subscription.html#pull-instance_method) messages from Cloud Pub/Sub ## Preparation - Create a project on Google Developer Console - Add a topic of Cloud Pub/Sub to the project - Add a pull style subscription to the topic - Download your credential (json) or [set scope on GCE instance](https://cloud.google.com/compute/docs/api/how-tos/authorization) ## Installation Install by gem: ```shell $ gem install fluent-plugin-gcloud-pubsub-custom ``` **Caution** This plugin doesn't work in [td-agent](http://docs.fluentd.org/articles/install-by-rpm). Please use in [Fluentd installed by gem](http://docs.fluentd.org/articles/install-by-gem). ## Configuration ### Publish messages Use `gcloud_pubsub` output plugin. ``` @type gcloud_pubsub project key topic autocreate_topic false max_messages 1000 max_total_size 9800000 buffer_type file buffer_path /path/to/your/buffer flush_interval 1s try_flush_interval 0.1 format json ``` - `project` (optional) - Set your GCP project. - Running fluentd on GCP, you don't have to specify. - You can also use environment variable such as `GCLOUD_PROJECT`. - `key` (optional) - Set your credential file path. - Running fluentd on GCP, you can use scope instead of specifying this. - You can also use environment variable such as `GCLOUD_KEYFILE`. - `topic` (required) - Set topic name to publish. - `autocreate_topic` (optional, default: `false`) - If set to `true`, specified topic will be created when it doesn't exist. - `max_messages` (optional, default: `1000`) - Publishing messages count per request to Cloud Pub/Sub. - See https://cloud.google.com/pubsub/quotas#other_limits - `max_total_size` (optional, default: `9800000` = `9.8MB`) - Publishing messages bytesize per request to Cloud Pub/Sub. This parameter affects only message size. You should specify a little smaller value than quota. - See https://cloud.google.com/pubsub/quotas#other_limits - `buffer_type`, `buffer_path`, `flush_interval`, `try_flush_interval` - These are fluentd buffer configuration. See http://docs.fluentd.org/articles/buffer-plugin-overview - `format` (optional, default: `json`) - Set output format. See http://docs.fluentd.org/articles/out_file#format ### Pull messages Use `gcloud_pubsub` input plugin. ``` @type gcloud_pubsub tag example.pull project key topic subscription max_messages 1000 return_immediately true pull_interval 0.5 pull_threads 2 format json enable_rpc true rpc_bind 0.0.0.0 rpc_port 24680 ``` - `tag` (required) - Set tag of messages. - `project` (optional) - Set your GCP project - Running fluentd on GCP, you don't have to specify. - You can also use environment variable such as `GCLOUD_PROJECT`. - `key` (optional) - Set your credential file path. - Running fluentd on GCP, you can use scope instead of specifying this. - You can also use environment variable such as `GCLOUD_KEYFILE`. - `topic` (required) - Set topic name to pull. - `subscription` (required) - Set subscription name to pull. - `max_messages` (optional, default: `100`) - See maxMessages on https://cloud.google.com/pubsub/subscriber#receiving-pull-messages - `return_immediately` (optional, default: `true`) - See returnImmediately on https://cloud.google.com/pubsub/subscriber#receiving-pull-messages - If `return_immediately` is `true` or pulling message is stopped by HTTP RPC, this plugin wait `pull_interval` each pull. - `pull_interval` (optional, default: `5.0`) - Pulling messages by intervals of specified seconds. - `pull_threads` (optional, default: `1`) - Set number of threads to pull messages. - `format` (optional, default: `json`) - Set input format. See format section in http://docs.fluentd.org/articles/in_tail - `enable_rpc` (optional, default: `false`) - If `true` is specified, HTTP RPC to stop or start pulling message is enabled. - `rpc_bind` (optional, default: `0.0.0.0`) - Bind IP address for HTTP RPC. - `rpc_port` (optional, default: `24680`) - Port for HTTP RPC. ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new Pull Request ## TODO - Add `tag` attribute in output plugin and use `tag` attribute as tag in input plugin. - Send ack after other output plugin committed (if possible). ## Authors - [@mdoi](https://github.com/mdoi) : First author - [@mia-0032](https://github.com/mia-0032) : This version author