It was three full days into a five day training course when suddenly the students - Support staff - became very animated and excited.

They were watching all the aggregated Cloud Foundry component logs & events from across the entire system.

"Oh I wish you'd shown us this on day one!"

Ahh blessed Support people can be more excited about what's wrong with a system than the incredible discovery that something like Cloud Foundry even works at all.

Cloud Foundry includes two layers of logging:

  • user/application logs and events
  • operations component logs and message bus events

The former are expressly for the end users/teams. These logs can be streamed to the local command line or continously drained off to logging services like Papertrail or Logentries.

The latter was what the Support training students had seen. All the components' logs (router, cloudcontroller, health manager, runner, etc) and all the intercommunication messages (message bus) were being aggregated and stored.

In the demo to the students, and the video below, we use the built-in example aggregator that comes bundled with Cloud Foundry. In production, most operations people connect in Logstash or Splunk or similar.

Enabling syslog for components

Whether you use the built-in example aggregator job or a remote syslog receiver such as Logstash or Splunk, you want to add the following global property to your BOSH deployment manifest for Cloud Foundry.

properties:  
  syslog_aggregator:
    address: 10.15.213.19
    port: 54321

Where the address and port values are for the inbound endpoint of your logging aggregator.

By default tcp transport is used. You can change it to udp or repl:

properties:  
  syslog_aggregator:
    address: 10.15.213.19
    port: 54321
    transport: udp

Running the example aggregator

In the video above we run the syslog_aggregator job that is built-in with Cloud Foundry's BOSH release.

Example configuration for running it could be:

jobs:  
  - name: syslog_aggregator_z1
    templates:
      - name: syslog_aggregator
        release: cf
    instances: 1
    resource_pool: small_z1
    networks:
      - name: cf1
        default: [dns, gateway]
        static_ips:
          - 10.15.213.19

The assigned static_ip should be used by the properties.syslog_aggregator.address configuration in the previous section.