{"id":46253,"date":"2024-05-15T01:41:09","date_gmt":"2024-05-15T01:41:09","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=46253"},"modified":"2024-05-29T03:05:09","modified_gmt":"2024-05-29T03:05:09","slug":"icinga-tutorials-how-to-monitor-docker-using-icinga-agent","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/icinga-tutorials-how-to-monitor-docker-using-icinga-agent\/","title":{"rendered":"icinga tutorials: How to monitor Docker using icinga agent"},"content":{"rendered":"\n<p>Monitoring Docker containers on an Ubuntu server using Icinga involves setting up the Icinga agent to execute Docker-specific monitoring checks and configuring the Icinga server to process and display these checks. Here is a step-by-step guide to achieve this.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install Docker Monitoring Plugin<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">On the Icinga Agent Server: You need to have a plugin that can monitor Docker. One common choice is the check_docker plugin, which can be found on GitHub. You will have to manually download and install <span class=\"hljs-keyword\">this<\/span> plugin.\n\n$ cd \/usr\/lib\/nagios\/plugins\n$ sudo wget https:<span class=\"hljs-comment\">\/\/exchange.icinga.com\/elacheche\/Docker%20containers%20check\/files\/12915\/docker_check.py<\/span>\n$ sudo chmod +x docker_check.py\n\nInstall Python and Docker SDK <span class=\"hljs-keyword\">for<\/span> Python: The check_docker plugin requires Python and the Docker SDK <span class=\"hljs-keyword\">for<\/span> Python.\n\n$ sudo apt-<span class=\"hljs-keyword\">get<\/span> update\n$ sudo apt-<span class=\"hljs-keyword\">get<\/span> install python3 python3-pip\n$ sudo pip3 install docker\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/99424daf4f57362abc94790d99036dad.js\"><\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Configure Icinga Agent<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Add Command Definitions: You need to define a command <span class=\"hljs-keyword\">in<\/span> Icinga <span class=\"hljs-keyword\">for<\/span> the Docker check. Create or edit a configuration file <span class=\"hljs-keyword\">in<\/span> the Icinga agent:\n\nsudo nano \/etc\/icinga2\/conf.d\/commands.conf\nAdd the following definition:\n\nobject CheckCommand <span class=\"hljs-string\">\"docker_check\"<\/span> {\n    command = &#91; <span class=\"hljs-string\">\"\/usr\/bin\/python3\"<\/span>, <span class=\"hljs-string\">\"\/usr\/lib\/nagios\/plugins\/docker_check.py\"<\/span> ]\n    <span class=\"hljs-built_in\">arguments<\/span> = {\n        <span class=\"hljs-string\">\"--containers\"<\/span> = <span class=\"hljs-string\">\"$docker_containers$\"<\/span>\n        <span class=\"hljs-string\">\"--stats\"<\/span> = <span class=\"hljs-string\">\"$docker_stats$\"<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure Icinga Server<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Define Host <span class=\"hljs-built_in\">Object<\/span>: If not already done, define the host object <span class=\"hljs-keyword\">for<\/span> the Docker server <span class=\"hljs-keyword\">in<\/span> your Icinga server configuration:\n\nobject Host <span class=\"hljs-string\">\"docker-server\"<\/span> {\n    <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"generic-host\"<\/span>\n    address = <span class=\"hljs-string\">\"docker-agent-ip\"<\/span>\n    check_command = <span class=\"hljs-string\">\"hostalive\"<\/span>\n}\n\nDefine Service <span class=\"hljs-keyword\">for<\/span> Docker Monitoring: Create a service definition to monitor Docker:\n\napply Service <span class=\"hljs-string\">\"docker-status\"<\/span> {\n    <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"generic-service\"<\/span>\n    check_command = <span class=\"hljs-string\">\"docker_check\"<\/span>\n    vars.docker_containers = <span class=\"hljs-string\">\"all\"<\/span>\n    vars.docker_stats = <span class=\"hljs-string\">\"true\"<\/span>\n    assign where host.name == <span class=\"hljs-string\">\"docker-server\"<\/span>\n}\n\nReload Icinga <span class=\"hljs-number\">2<\/span>: After configuring the service and command, reload Icinga <span class=\"hljs-number\">2<\/span> to apply the changes:\n\n$ sudo systemctl reload icinga2<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 4: Verify the Configuration<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Icinga Web <span class=\"hljs-number\">2<\/span>: Log into Icinga Web <span class=\"hljs-number\">2<\/span> and check the <span class=\"hljs-string\">'Services'<\/span> section. You should see your <span class=\"hljs-keyword\">new<\/span> service <span class=\"hljs-keyword\">for<\/span> monitoring Docker. Ensure that it is reporting the status <span class=\"hljs-keyword\">of<\/span> Docker containers <span class=\"hljs-keyword\">as<\/span> expected.\n\nTroubleshooting: If the checks aren<span class=\"hljs-string\">'t working as expected, look at the logs in \/var\/log\/icinga2\/icinga2.log for any errors. Check the permissions of the check_docker.py script and ensure that the Icinga user can execute it and has access to Docker via the Docker group.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Monitoring Docker containers on an Ubuntu server using Icinga involves setting up the Icinga agent to execute Docker-specific monitoring checks and configuring the Icinga server to process and display these&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[8217],"tags":[],"class_list":["post-46253","post","type-post","status-publish","format-standard","hentry","category-icinga"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/46253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=46253"}],"version-history":[{"count":7,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/46253\/revisions"}],"predecessor-version":[{"id":46268,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/46253\/revisions\/46268"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=46253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=46253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=46253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}