{"id":319,"date":"2020-07-21T17:22:38","date_gmt":"2020-07-21T16:22:38","guid":{"rendered":"https:\/\/blog.thomarite.uk\/?p=319"},"modified":"2020-07-22T20:34:51","modified_gmt":"2020-07-22T19:34:51","slug":"monitoring-syslog-influxdb-telegraf-grafana-via-ansible-role","status":"publish","type":"post","link":"https:\/\/blog.thomarite.uk\/index.php\/2020\/07\/21\/monitoring-syslog-influxdb-telegraf-grafana-via-ansible-role\/","title":{"rendered":"Monitoring Syslog: InfluxDB-Telegraf-Grafana via Ansible role"},"content":{"rendered":"\n<p>This a continuation of the last blog entry. This time we are going to gather syslog messages from the monitoring containers and it is going to be deployed by ansible!<\/p>\n\n\n\n<p>As usual, all this is based on Anton&#8217;s Karneliuk blog <a href=\"https:\/\/karneliuk.com\/2019\/05\/monitoring-logs-from-docker-containers-and-network-functions-cumulus-cisco-arista-nokia-using-telegraf-influxdb-and-grafana\/\">post<\/a>. All credits to him.<\/p>\n\n\n\n<p>So initially we built a monitoring stack with InfluxDB, Telegraf and Grafana manually to gather and visualise SNMP infor form the Arista cEOS switches.<\/p>\n\n\n\n<p>This time, we are going to send SYSLOG from the monitoring stack containers to a new Telegraf instance.<\/p>\n\n\n\n<p>Ideally, we would like to send Syslog from the cEOS devices but as Anton mentions, the syslog <a href=\"https:\/\/tools.ietf.org\/html\/rfc3164\">rfc3164<\/a> that most network kit implements, it is not supported (yet) by telegraf, that supports <a href=\"https:\/\/tools.ietf.org\/html\/rfc5424\">rfc5424<\/a>.<\/p>\n\n\n\n<p>You can read more info about this in all these links:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/influxdata\/telegraf\/issues\/4593\">https:\/\/github.com\/influxdata\/telegraf\/issues\/4593<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/influxdata\/go-syslog\/pull\/27\">https:\/\/github.com\/influxdata\/go-syslog\/pull\/27<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/influxdata\/telegraf\/issues\/7023\">https:\/\/github.com\/influxdata\/telegraf\/issues\/7023<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/influxdata\/telegraf\/issues\/4687\">https:\/\/github.com\/influxdata\/telegraf\/issues\/4687<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/medium.com\/@leodido\/from-logs-to-metrics-f38854e3441a\">https:\/\/medium.com\/@leodido\/from-logs-to-metrics-f38854e3441a<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/itnext.io\/metrics-from-kubernetes-logs-82cb1dcb3551\">https:\/\/itnext.io\/metrics-from-kubernetes-logs-82cb1dcb3551<\/a><\/p>\n\n\n\n<p>So the new ansible role for building influx-telegraf-grafana instances is &#8220;monitoring_stack&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u251c\u2500\u2500 ansible.cfg\n\u251c\u2500\u2500 ansible-hosts\n\u251c\u2500\u2500 group_vars\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 ceoslab.yaml\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 monitoring.yaml\n\u2514\u2500\u2500 playbooks\n    \u251c\u2500\u2500 monitoring.yaml\n    \u2514\u2500\u2500 roles\n        \u251c\u2500\u2500 monitoring_stack\n        \u2502\u00a0\u00a0 \u251c\u2500\u2500 tasks\n        \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 container_grafana.yml\n        \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 container_influxdb.yml\n        \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 container_telegraf_snmp.yml\n        \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 container_telegraf_syslog.yml\n        \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.yml\n        \u2502\u00a0\u00a0 \u2514\u2500\u2500 templates\n        \u2502\u00a0\u00a0     \u251c\u2500\u2500 telegraf_snmp_template.j2\n        \u2502\u00a0\u00a0     \u2514\u2500\u2500 telegraf_syslog_template.j2\n<\/code><\/pre>\n\n\n\n<p>We will have four monitoring containers:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>influxdb<\/em>: our time-series database with two databases: snmp and syslog<\/li><li><em>grafana<\/em>: GUI to visualize influxdb contents, we will have pales for snmp and syslog queries. It will need to connect to influxdb<\/li><li><em>telegraf-snmp<\/em>: collector of snmp info from the cEOS containers. The list is introduced <strong>manually<\/strong> in the template. It will write in influxdb<\/li><li><em>telegraf-syslog<\/em>: collector of syslog messages from the monitoring containers. It will write in influxdb<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"590\" height=\"269\" src=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/Untitled-Diagram.png\" alt=\"\" class=\"wp-image-320\" srcset=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/Untitled-Diagram.png 590w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/Untitled-Diagram-300x137.png 300w\" sizes=\"auto, (max-width: 590px) 85vw, 590px\" \/><\/figure>\n\n\n\n<p>As the containers are running locally, we define them in the <em>inventory<\/em> like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ cat ansible-hosts\n....\n[monitoring]\nlocalhost<\/pre>\n\n\n\n<p>We define some variables too in <em>group_vars<\/em> for the monitoring containers that will be used in the jinja2 templates and tasks<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ cat group_vars\/monitoring.yaml\n# Defaults for Docker containers\ndocker_mon_net:\n  name: monitoring\n  subnet: 172.18.0.0\/16\n  gateway: 172.18.0.1\n\npath_to_containers: \/PICK_YOUR_PATH\/monitoring-example\n\nvar_influxdb:\n  username: xxx\n  password: xxx123\n  snmp_community: xxx123\n  db_name:\n    snmp: snmp\n    syslog: syslog\n\nvar_grafana:\n  username: admin\n  password: xxx123\n\nvar_telegraf:\n\u2026<\/pre>\n\n\n\n<p>So we execute the playbook like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ansible master$ ansible-playbook playbooks\/monitoring.yaml -vvv --ask-become-pass<\/pre>\n\n\n\n<p>The very first time, if you pay attention to the ansible logging, everything should success. If for any reason you have to make changes or troubleshoot, and execute again the full playbook, some tasks will fail, but not the playbook (this is done with <em>ignore_errors: yes<\/em> inside a task). For example, the docker network creation will fail as it is already there. The same if you try to create the user and dbs in a already running influx instance.<\/p>\n\n\n\n<p>That playbook just calls the role &#8220;<em>monitoring_stack<\/em>&#8220;.  The main playbook in that role will create the docker network where all containers will be attached, all the containers and do something hacky with iptables.<\/p>\n\n\n\n<p>As the cEOS lab is built (using docker-topo) independently of this playbook, there are already some iptables rules in place, and somehow, when executing the role, the rules change and it blocks the new network for any outbound connectivity.<\/p>\n\n\n\n<p>Before the iptables change in the playbook:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># iptables -t filter -S DOCKER-ISOLATION-STAGE-1\nWarning: iptables-legacy tables present, use iptables-legacy to see them\n-N DOCKER-ISOLATION-STAGE-1\n-A DOCKER-ISOLATION-STAGE-1 -i br-4bd17cfa19a8 ! -o br-4bd17cfa19a8 -j DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-1 -j ACCEPT\n-A DOCKER-ISOLATION-STAGE-1 -i br-94c1e813ad6f ! -o br-94c1e813ad6f -j DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-1 -i br-13ab2b6a0d1d ! -o br-13ab2b6a0d1d -j DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-1 -i br-00db5844bbb0 ! -o br-00db5844bbb0 -j DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-1 -i br-121978ca0282 ! -o br-121978ca0282 -j DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-1 -j RETURN\n#\n# iptables -t filter -S DOCKER-ISOLATION-STAGE-2\nWarning: iptables-legacy tables present, use iptables-legacy to see them\n-N DOCKER-ISOLATION-STAGE-2\n-A DOCKER-ISOLATION-STAGE-2 -o br-4bd17cfa19a8 -j DROP\n-A DOCKER-ISOLATION-STAGE-2 -o br-94c1e813ad6f -j DROP\n-A DOCKER-ISOLATION-STAGE-2 -o br-13ab2b6a0d1d -j DROP\n-A DOCKER-ISOLATION-STAGE-2 -o br-00db5844bbb0 -j DROP\n-A DOCKER-ISOLATION-STAGE-2 -o br-121978ca0282 -j DROP\n-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP\n-A DOCKER-ISOLATION-STAGE-2 -j RETURN<\/pre>\n\n\n\n<p>I want to avoid DOCKER-ISOLATION-STAGE-2 so I want the &#8220;-A DOCKER-ISOLATION-STAGE-1 -j ACCEPT&#8221; on top of that chain. <\/p>\n\n\n\n<p>This is not the first (neither last) time that this issue bites me. I need to review carefully the docker-topo file and really get me head around the networking expectations from docker.<\/p>\n\n\n\n<p>Another thing about docker networking that bites me very often. In my head, each monitoring has an IP. For example influxdb is 172.18.0.2 and telegraf-syslog is 172.18.0.4. We have configured influxdb to send syslog to telegraf-syslog container so I would expect the influxdb container to use its 0.2 and everything is local (no forwarding, no firewall, etc0. But not, it uses the host ip, 172.18.0.1.<\/p>\n\n\n\n<p>Apart from that, there are several things that I had to review while adapting the role to my environment regarding docker and ansible.<\/p>\n\n\n\n<p><strong>docker documentation:<\/strong><\/p>\n\n\n\n<p>how to create network: https:\/\/docs.docker.com\/engine\/reference\/commandline\/network_create\/<\/p>\n\n\n\n<p>how to configure container logs: https:\/\/docs.docker.com\/engine\/reference\/commandline\/container_logs\/<\/p>\n\n\n\n<p>how to configure the logging driver in a container: https:\/\/docs.docker.com\/config\/containers\/logging\/configure\/<\/p>\n\n\n\n<p>how to configure syslog in a container: https:\/\/docs.docker.com\/config\/containers\/logging\/syslog\/<\/p>\n\n\n\n<p>how to run commands from a running container: https:\/\/docs.docker.com\/engine\/reference\/commandline\/exec\/<br><\/p>\n\n\n\n<p><strong>ansible documentation<\/strong>:<\/p>\n\n\n\n<p>become &#8211; run comamnds with sudo in a playbook: https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/become.html (&#8211;ask-become-pass, -K)<\/p>\n\n\n\n<p>docker container module: https:\/\/docs.ansible.com\/ansible\/latest\/modules\/docker_container_module.html<\/p>\n\n\n\n<p>grafana data source module: https:\/\/docs.ansible.com\/ansible\/latest\/modules\/grafana_datasource_module.html<\/p>\n\n\n\n<p>This is important because via ansible, I had to workout the meaning of <strong>become<\/strong>, how to add the <strong>syslog<\/strong> config in the containers and add grafana <strong>datasources<\/strong> via a module.<\/p>\n\n\n\n<p>All my ansible code is <a href=\"https:\/\/github.com\/thomarite\/ceos-testing\/tree\/master\/ansible\">here<\/a>.<\/p>\n\n\n\n<p>Another thing I had to <strong>hardcode<\/strong> in the code, it is the IP for the telegraf-syslog container in each container playbook: <\/p>\n\n\n\n<p>syslog-address: &#8220;udp:\/\/172.18.0.4:6514&#8221;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat container_influxdb.yml \n---\n...\n- name: 4- CONTAINER INFLUXDB \/\/ LAUNCHING CONTAINER\n  docker_container:\n      name: influxdb\n      image: influxdb\n      state: started\n      command: \"-config \/etc\/influxdb\/influxdb.conf\"\n      networks:\n          - name: \"{{ docker_mon_net.name }}\"\n      purge_networks: yes\n      ports:\n          - \"8086:8086\"\n      volumes:\n          - \"{{ path_to_containers }}\/influxdb\/influxdb.conf:\/etc\/influxdb\/influxdb.conf:ro\"\n          - \"{{ path_to_containers }}\/influxdb\/data:\/var\/lib\/influxdb\"\n      log_driver: syslog\n      log_options:\n        syslog-address: \"udp:\/\/172.18.0.4:6514\"\n        tag: influxdb\n        syslog-format: rfc5424\n  become: yes\n  tags:\n      - tag_influx\n...<\/code><\/pre>\n\n\n\n<p>Once you have all containers running:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ docker ps -a\nCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES\ndd519ff01d6e        telegraf            \"\/entrypoint.sh -con\u2026\"   4 hours ago         Up 4 hours          8092\/udp, 0.0.0.0:161->161\/udp, 8125\/udp, 8094\/tcp     telegraf_snmp\n869f158046a6        grafana\/grafana     \"\/run.sh\"                4 hours ago         Up 4 hours          0.0.0.0:3000->3000\/tcp                                 grafana\ndc68f261746b        influxdb            \"\/entrypoint.sh -con\u2026\"   4 hours ago         Up 4 hours          0.0.0.0:8086->8086\/tcp                                 influxdb\n3662c3c69b21        telegraf            \"\/entrypoint.sh -con\u2026\"   6 hours ago         Up 6 hours          8092\/udp, 0.0.0.0:6514->6514\/udp, 8125\/udp, 8094\/tcp   telegraf_syslog\nada1f884f1b7        ceos-lab:4.23.3M    \"\/sbin\/init systemd.\u2026\"   28 hours ago        Up 4 hours          0.0.0.0:2002->22\/tcp, 0.0.0.0:9002->443\/tcp            3node_r03\n22d9c4ae9043        ceos-lab:4.23.3M    \"\/sbin\/init systemd.\u2026\"   28 hours ago        Up 4 hours          0.0.0.0:2001->22\/tcp, 0.0.0.0:9001->443\/tcp            3node_r02\nfe7046b1f425        ceos-lab:4.23.3M    \"\/sbin\/init systemd.\u2026\"   28 hours ago        Up 4 hours          0.0.0.0:2000->22\/tcp, 0.0.0.0:9000->443\/tcp            3node_r01\n<\/code><\/pre>\n\n\n\n<p>You should verify that syslog messages are stored in influxdb:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -G 'https:\/\/localhost:8086\/query?db=syslog&amp;pretty=true&amp;u=xxx&amp;p=xxx123' --data-urlencode \"q=SELECT * FROM syslog limit 2\" --insecure\n{\n    \"results\": &#91;\n        {\n            \"statement_id\": 0,\n            \"series\": &#91;\n                {\n                    \"name\": \"syslog\",\n                    \"columns\": &#91;\n                        \"time\",\n                        \"appname\",\n                        \"facility\",\n                        \"facility_code\",\n                        \"host\",\n                        \"hostname\",\n                        \"message\",\n                        \"msgid\",\n                        \"procid\",\n                        \"severity\",\n                        \"severity_code\",\n                        \"timestamp\",\n                        \"version\"\n                    ],\n                    \"values\": &#91;\n                        &#91;\n                            \"2020-07-21T12:08:16.216632823Z\",\n                            \"influxdb\",\n                            \"daemon\",\n                            3,\n                            \"3662c3c69b21\",\n                            \"athens\",\n                            \"ts=2020-07-21T12:08:16.169711Z lvl=info msg=\\\"InfluxDB starting\\\" log_id=0O8KE_AG000 version=1.8.1 branch=1.8 commit=af0237819ab9c5997c1c0144862dc762b9d8fc25\",\n                            \"influxdb\",\n                            \"11254\",\n                            \"err\",\n                            3,\n                            1595333296000000000,\n                            1\n                        ],\n<\/code><\/pre>\n\n\n\n<p>We can create the new queries in grafana for SYSLOG. The datasources are already created by ansible so we dont have to worry about that.<\/p>\n\n\n\n<p>For creating a query about the number of syslog messages we receive. This is what I did:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" src=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-1024x526.png\" alt=\"\" class=\"wp-image-321\" srcset=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-1024x526.png 1024w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-300x154.png 300w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-768x394.png 768w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-1536x788.png 1536w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-2048x1051.png 2048w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-rate-query-1200x616.png 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>grafana &#8211; syslog rate query<\/figcaption><\/figure>\n\n\n\n<p>Most of the entries come from &#8220;influxdb&#8221;.<\/p>\n\n\n\n<p>For creating a query with the content of each syslog message:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"547\" src=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-1024x547.png\" alt=\"\" class=\"wp-image-322\" srcset=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-1024x547.png 1024w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-300x160.png 300w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-768x410.png 768w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-1536x820.png 1536w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-2048x1094.png 2048w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-content-query-1200x641.png 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>grafana &#8211; syslog content<\/figcaption><\/figure>\n\n\n\n<p>Here I struggled a bit. I can&#8217;t really change much in the table view.<\/p>\n\n\n\n<p>And this is the dashboard with the syslog queries and snmp from the last blog entry:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"602\" src=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-1024x602.png\" alt=\"\" class=\"wp-image-323\" srcset=\"https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-1024x602.png 1024w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-300x176.png 300w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-768x451.png 768w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-1536x902.png 1536w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-2048x1203.png 2048w, https:\/\/blog.thomarite.uk\/wp-content\/uploads\/2020\/07\/grafana-syslog-snmp-dashboard-1200x705.png 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>grafana &#8211; dashboard &#8211; syslog and snmp<\/figcaption><\/figure>\n\n\n\n<p>So at the end, I have an ansible role working!<\/p>\n\n\n\n<p>Need to learn more about how to backup stuff from grafana. I have been playing with this:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/ysde\/grafana-backup-tool\">https:\/\/github.com\/ysde\/grafana-backup-tool<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-www-neteye-blog-com\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"NJcE7VnpAM\"><a href=\"https:\/\/www.neteye-blog.com\/2018\/12\/how-to-back-up-all-of-your-grafana-dashboards\/\">How to Back Up All of Your Grafana Dashboards<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;How to Back Up All of Your Grafana Dashboards&#8221; &#8212; www.neteye-blog.com\" src=\"https:\/\/www.neteye-blog.com\/2018\/12\/how-to-back-up-all-of-your-grafana-dashboards\/embed\/#?secret=NJcE7VnpAM\" data-secret=\"NJcE7VnpAM\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Next thing I want to try is telemetry.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This a continuation of the last blog entry. This time we are going to gather syslog messages from the monitoring containers and it is going to be deployed by ansible! As usual, all this is based on Anton&#8217;s Karneliuk blog post. All credits to him. So initially we built a monitoring stack with InfluxDB, Telegraf &hellip; <a href=\"https:\/\/blog.thomarite.uk\/index.php\/2020\/07\/21\/monitoring-syslog-influxdb-telegraf-grafana-via-ansible-role\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Monitoring Syslog: InfluxDB-Telegraf-Grafana via Ansible role&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,22],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-automation","category-monitoring"],"_links":{"self":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/comments?post=319"}],"version-history":[{"count":3,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":344,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts\/319\/revisions\/344"}],"wp:attachment":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/media?parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/categories?post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/tags?post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}