################################################################################
## BRIEF : Testing docker log drivers
##
## DATE  : 2017-10-17 17:50:55
## GROUP : docker
## TAGS  : docker,moby,kubernetes,logging,plugin,driver,kafka,logs2kafka
## FILE  : kubernetes-docker-log-driver-kafka.txt
################################################################################


################################################################################
## description
################################################################################

    # Investigating docker log driver and especially the Kafka plugin.

################################################################################
## references
################################################################################

    # Kube Kafka log driver
    > https://github.com/MickayG/moby-kafka-logdriver

    # Logs2Kafka
    > https://groups.google.com/forum/#!topic/kubernetes-users/iLDsG85exRQ
    > https://github.com/garo/logs2kafka

################################################################################
## commands
################################################################################

    # Get logs from pods
    $ kubectl get pods
    $ kubectl logs kafka-0

    # Install docker log driver for Kafka
    $ docker ps --format "{{.Names}}" | grep -E 'kafka|logstash'
    $ docker inspect k8s_POD_kafka-0...
    $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' k8s_POD_kafka-0...
    $ docker plugin install --disable mickyg/kafka-logdriver:latest
    $ docker plugin set mickyg/kafka-logdriver:latest KAFKA_BROKER_ADDR="10.2.28.10:9092"
    $ docker plugin inspect mickyg/kafka-logdriver
    $ docker plugin enable mickyg/kafka-logdriver:latest
    $ docker run --log-driver mickyg/kafka-logdriver:latest hello-world
    $ docker plugin disable mickyg/kafka-logdriver:latest

    # Get current docker log driver
    $ docker info |grep 'Logging Driver' # Default driver
    $ docker ps --format "{{.Names}}" | grep -E 'kafka|logstash'
    $ docker inspect k8s_POD_kafka-0...
    $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' k8s_POD_logstash...
    $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' k8s_POD_kafka-0...
    $ docker inspect $(docker ps | grep POD | awk '{print $1}') | grep -E "Hostname|NetworkID
    $ docker inspect $(docker ps | grep POD | awk '{print $1}') | while read line ; do egrep -E '"Hostname"|"IPAddress"' ; done | while read line ; do echo $line ; done

################################################################################
## solutions
################################################################################

################################################################################
## configurations
################################################################################

    # Logstash configuration
    $ vi elk-stack/logstash/build/pipeline/kafka.conf
      input {
          gelf {}
      }

      output {
          elasticsearch {
            hosts => ["elasticsearch"]
          }
          stdout {}
      }

    # Kafka configuration
    $ vi elk-stack/logstash/build/pipeline/kafka.conf
    kafka {
        type => "argus.docker"
        topics => ["dockerlogs"]
        codec => "plain"
        bootstrap_servers => "kafka:9092"
        consumer_threads => 1
    }

################################################################################
## whiteboard
################################################################################

