From ee76535a12c32a98f5261ad857cbbbf2f32cca72 Mon Sep 17 00:00:00 2001 From: Sebastian Spaink <3441183+sspaink@users.noreply.github.com> Date: Wed, 6 Jan 2021 16:23:40 -0600 Subject: [PATCH] Provide test environment for kibana input plugin (#8629) --- plugins/inputs/kibana/README.md | 15 ++++ .../basic_kibana_telegraf.conf | 75 +++++++++++++++++++ .../test_environment/docker-compose.yml | 48 ++++++++++++ .../kibana/test_environment/run_test_env.sh | 3 + 4 files changed, 141 insertions(+) create mode 100644 plugins/inputs/kibana/test_environment/basic_kibana_telegraf.conf create mode 100644 plugins/inputs/kibana/test_environment/docker-compose.yml create mode 100755 plugins/inputs/kibana/test_environment/run_test_env.sh diff --git a/plugins/inputs/kibana/README.md b/plugins/inputs/kibana/README.md index 73bf4a298..a5002d5f2 100644 --- a/plugins/inputs/kibana/README.md +++ b/plugins/inputs/kibana/README.md @@ -53,3 +53,18 @@ The `kibana` plugin queries the [Kibana][] API to obtain the service status. ``` kibana,host=myhost,name=my-kibana,source=localhost:5601,status=green,version=6.5.4 concurrent_connections=8i,heap_max_bytes=447778816i,heap_total_bytes=447778816i,heap_used_bytes=380603352i,requests_per_sec=1,response_time_avg_ms=57.6,response_time_max_ms=220i,status_code=1i,uptime_ms=6717489805i 1534864502000000000 ``` + +## Run example environment + +Requires the following tools: + +* [Docker](https://docs.docker.com/get-docker/) +* [Docker Compose](https://docs.docker.com/compose/install/) + +From the root of this project execute the following script: `./plugins/inputs/kibana/test_environment/run_test_env.sh` + +This will build the latest Telegraf and then start up Kibana and Elasticsearch, Telegraf will begin monitoring Kibana's status and write its results to the file `/tmp/metrics.out` in the Telegraf container. + +Then you can attach to the telegraf container to inspect the file `/tmp/metrics.out` to see if the status is being reported. + +The Visual Studio Code [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension provides an easy user interface to attach to the running container. \ No newline at end of file diff --git a/plugins/inputs/kibana/test_environment/basic_kibana_telegraf.conf b/plugins/inputs/kibana/test_environment/basic_kibana_telegraf.conf new file mode 100644 index 000000000..c67f346b5 --- /dev/null +++ b/plugins/inputs/kibana/test_environment/basic_kibana_telegraf.conf @@ -0,0 +1,75 @@ +# Telegraf Configuration for basic Kibana example + +# Configuration for telegraf agent +[agent] + ## Default data collection interval for all inputs + interval = "10s" + ## Rounds collection interval to 'interval' + ## ie, if interval="10s" then always collect on :00, :10, :20, etc. + round_interval = true + + ## Telegraf will send metrics to outputs in batches of at most + ## metric_batch_size metrics. + ## This controls the size of writes that Telegraf sends to output plugins. + metric_batch_size = 1000 + + ## Maximum number of unwritten metrics per output. Increasing this value + ## allows for longer periods of output downtime without dropping metrics at the + ## cost of higher maximum memory usage. + metric_buffer_limit = 10000 + + ## Collection jitter is used to jitter the collection by a random amount. + ## Each plugin will sleep for a random time within jitter before collecting. + ## This can be used to avoid many plugins querying things like sysfs at the + ## same time, which can have a measurable effect on the system. + collection_jitter = "0s" + + ## Default flushing interval for all outputs. Maximum flush_interval will be + ## flush_interval + flush_jitter + flush_interval = "10s" + ## Jitter the flush interval by a random amount. This is primarily to avoid + ## large write spikes for users running a large number of telegraf instances. + ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s + flush_jitter = "0s" + + ## By default or when set to "0s", precision will be set to the same + ## timestamp order as the collection interval, with the maximum being 1s. + ## ie, when interval = "10s", precision will be "1s" + ## when interval = "250ms", precision will be "1ms" + ## Precision will NOT be used for service inputs. It is up to each individual + ## service input to set the timestamp at the appropriate precision. + ## Valid time units are "ns", "us" (or "µs"), "ms", "s". + precision = "" + + ## Override default hostname, if empty use os.Hostname() + hostname = "" + ## If set to true, do no set the "host" tag in the telegraf agent. + omit_hostname = false + + +############################################################################### +# OUTPUT PLUGINS # +############################################################################### + +# Send telegraf metrics to file(s) +[[outputs.file]] + ## Files to write to, "stdout" is a specially handled file. + files = ["stdout", "/tmp/metrics.out"] + + ## Data format to output. + ## Each data format has its own unique set of configuration options, read + ## more about them here: + ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md + data_format = "influx" + +############################################################################### +# INPUT PLUGINS # +############################################################################### + +# Read status information from one or more Kibana servers +[[inputs.kibana]] + ## Specify a list of one or more Kibana servers + servers = ["http://kib01:5601"] + + ## Timeout for HTTP requests + timeout = "5s" diff --git a/plugins/inputs/kibana/test_environment/docker-compose.yml b/plugins/inputs/kibana/test_environment/docker-compose.yml new file mode 100644 index 000000000..8aa6db00d --- /dev/null +++ b/plugins/inputs/kibana/test_environment/docker-compose.yml @@ -0,0 +1,48 @@ +## Reference: https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-dev-mode +version: '2.2' +services: + es01: + image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1 + container_name: es01 + environment: + - node.name=es01 + - cluster.name=es-docker-cluster + - cluster.initial_master_nodes=es01 + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - data01:/usr/share/elasticsearch/data + ports: + - 9200:9200 + networks: + - elastic + + kib01: + image: docker.elastic.co/kibana/kibana:7.10.1 + container_name: kib01 + ports: + - 5601:5601 + environment: + ELASTICSEARCH_URL: http://es01:9200 + ELASTICSEARCH_HOSTS: http://es01:9200 + networks: + - elastic + + telegraf: + image: local_telegraf + volumes: + - ./basic_kibana_telegraf.conf:/etc/telegraf/telegraf.conf:ro + networks: + - elastic + +volumes: + data01: + driver: local + +networks: + elastic: + driver: bridge diff --git a/plugins/inputs/kibana/test_environment/run_test_env.sh b/plugins/inputs/kibana/test_environment/run_test_env.sh new file mode 100755 index 000000000..8ea741ac3 --- /dev/null +++ b/plugins/inputs/kibana/test_environment/run_test_env.sh @@ -0,0 +1,3 @@ +docker build -t local_telegraf -f scripts/alpine.docker . + +docker-compose -f plugins/inputs/kibana/test_environment/docker-compose.yml up