A service that connects to the Cloud Foundry firehose and sends logs and metrics to Google Stackdriver.
go get github.com/cloudfoundry-community/stackdriver-tools/src/stackdriver-nozzle
stackdriver-nozzle
is configured through the following environment variables:
FIREHOSE_ENDPOINT
- the CF API endpoint; e.g., `https://api.bosh-lite.com'FIREHOSE_EVENTS_TO_STACKDRIVER_LOGGING
- comma-separated list of events to pass to Stackdriver Logging; valid events areLogMessage
,Error
,HttpStartStop
,ValueMetric
(BETA),CounterEvent
(BETA),ContainerMetric
(BETA)FIREHOSE_EVENTS_TO_STACKDRIVER_MONITORING
- comma-separated list of events to pass to Stackdriver Monitoring; valid events areValueMetric
,CounterEvent
, andContainerMetric
FIREHOSE_USERNAME
- CF username; defaults toadmin
- requires
doppler.firehose
andcloud_controller.admin_read_only
permissions
- requires
FIREHOSE_PASSWORD
- CF password; defaults topassword
FIREHOSE_SKIP_SSL
- whether to ignore SSL (please don't); defaults tofalse
GCP_PROJECT_ID
- the GCP project ID; will be automatically configured from the environment using metadata if left empty
FOUNDATION_NAME
- sets the value of the "foundation" label added to every metric / log exported to Stackdriver; defaults to "cf". This is useful for differentiating between multiple cloud foundry / BOSH instances in the same GCP / Stackdriver project.HEARTBEAT_RATE
- how oftenstackdriver-nozzle
reports stats to stdout; defaults to 30 secondsLOGGING_BATCH_COUNT
- how many logs to batch into a single report to Stackdriver; defaults to 10LOGGING_BATCH_DURATION
- maximum time to batch logs to Stackdriver; defaults to 1 secondMETRICS_BUFFER_DURATION
- flush interval (in seconds) of the internal metric buffer; defaults to 30METRICS_BATCH_SIZE
- batch size for metric time series being sent to Stackdriver; defaults to 200METRIC_PATH_PREFIX
- sets a prefix for all custom metrics exported to Stackdriver, e.g. custom.googleapis.com/PREFIX/gorouter.total_requests; defaults to "firehose". May contain slashes. Useful to "namespace" cloud foundry metrics from others in the same Stackdriver project.RESOLVE_APP_METADATA
- whether to hydrate app UUIDs into org name, org UUID, space name, space UUID, and app name; defaults totrue
SUBSCRIPTION_ID
- what subscription ID to use for connecting to the firehose; defaults tostackdriver-nozzle
Event filters allow users to selectively enable or disable the processing of firehose events by the Stackdriver Nozzle. The default behaviour is to process all events. Events that match a blacklist filter will not be processed unless they also match a whitelist filter.
A filter rule has three elements:
- A regexp, which must be a valid regular expression.
- A type, which may be either "name" or "job".
- name matches against a concatenation of event origin and metric
name with "." (e.g.
gorouter.total_requests
), and is only applicable for CounterEvent and ValueMetric event types.- job matches against the event job.
- name matches against a concatenation of event origin and metric
name with "." (e.g.
- A sink, which may be either "monitoring", "logging", or "all". The latter applies the rule to all firehose events, while the other two restrict the filter rule to events destined for Stackdriver Monitoring or Logging respectively.
These filter rules are expressed as a JSON object with two keys "blacklist" and
"whitelist". They are loaded from the file named in EVENT_FILTER_FILE
. It is
valid to omit either or both keys. Please take special care when escaping
regexp metacharacters with backslashes, because JSON!
An example filter file:
{
"blacklist": [
{"sink": "all", "type": "job", "regexp": "^router$"}
],
"whitelist": [
{"sink": "monitoring", "type": "name", "regexp": "^gorouter\\..*requests"},
"etc..."
]
}
go run main.go
Run make newb
to install required development dependencies.
A .envrc.template template is provided for a quick setup. We
suggest copying it to .envrc
and using direnv to automatically set
the environment variables when you're in the stackdriver-nozzle
directory.
When running on GCP, stackdriver-nozzle
will automatically configure
the required credentials and project ID, but they will need to be provided
manually through environment variables (see above) when running locally. You
can get the credentials JSON file by following Google's instructions
here from the credentials console.
Ginkgo is used for testing.
ginkgo -r
This project uses govendor for dependency management.
govendor fetch +missing