<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ricklatham</title>
    <description>The latest articles on DEV Community by ricklatham (@ricklatham).</description>
    <link>https://dev.to/ricklatham</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F859739%2F4f3c4bca-3913-4f93-9011-3dad273f24ba.jpg</url>
      <title>DEV Community: ricklatham</title>
      <link>https://dev.to/ricklatham</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ricklatham"/>
    <language>en</language>
    <item>
      <title>Don’t forget about roots: root cause analysis in data monitoring</title>
      <dc:creator>ricklatham</dc:creator>
      <pubDate>Sat, 04 Jun 2022 02:21:03 +0000</pubDate>
      <link>https://dev.to/ricklatham/dont-forget-about-roots-root-cause-analysis-in-data-monitoring-3ade</link>
      <guid>https://dev.to/ricklatham/dont-forget-about-roots-root-cause-analysis-in-data-monitoring-3ade</guid>
      <description>&lt;p&gt;Hi folks, this is Rick again. In the previous article, I talked about how the auto-discovering and auto-actions functionality in the AlOps systems helps IT specialists delegate routine tasks to machines, freeing up time for work that only a human brain can handle. But even in this case, AI cannot be discounted. If we are dealing with complex big data analysis, machines will not be able to think for us, but they will be able to significantly simplify this analysis, reducing time needed for thinking. Today I want to talk about the approach that is necessary in monitoring called &lt;strong&gt;root cause analysis&lt;/strong&gt; and show how it works based on the Acure example. So meet the sequel to the story of my adventures in the world of monitoring automation.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is root cause analysis and why is it so important?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I already compared an IT system to a living organism. And like any living organism, it can get sick. But in order to cure the disease, it is not enough to eliminate the symptoms. It is important to find out the cause of this disease and eliminate it. For this, we need root cause analysis.&lt;/p&gt;

&lt;p&gt;I came across the following picture on the Internet, which, in my opinion, clearly demonstrates how important it is to understand the cause of the problem in order to overcome it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0qqLuBhk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/0%2AtcJwTXntbCcg7zuF" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0qqLuBhk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/0%2AtcJwTXntbCcg7zuF" alt="" width="880" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The analogy with a tree is very accurate imagery. Root Cause Analysis is a method for identifying hidden causes that allows you to determine why a particular problem occurred. Thus RCA is a tree-like hierarchical structure of the dependencies between problem and causes.&lt;/p&gt;

&lt;p&gt;Root cause analysis answers three questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What’s the problem?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What’s the reason?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What should be done to prevent it in the future?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The search for answers to these questions leads us to a chain of three simple steps: &lt;strong&gt;Define-Analyze-Solve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;RCA helps not only to detect a problem, but also knowing its cause, to prevent its occurrence in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fI0z7f2q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ApVfrtgRAGqUcz0yH" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fI0z7f2q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ApVfrtgRAGqUcz0yH" alt="" width="825" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is worth noting that many who use this approach in analytics mistakenly believe that there can be only one root problem, although in reality, everything can be much more complicated. Therefore, it is so important to remember about the connections of the analyzed objects.&lt;/p&gt;

&lt;p&gt;Of course, in other areas where RCA is used, everything can be simpler, but definitely not in data monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What about RCA in data monitoring?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When monitoring data, we work with incidents that are almost impossible to solve if you do not know the reason for their occurrence. But event notifications often do not contain enough information about root causes. The more complex the IT infrastructure, the more difficult it is to find the root problem. Even if the IT specialist discovers the cause on his own, it may be just one of several.&lt;/p&gt;

&lt;p&gt;In order to make the process of searching and preventing the problem more streamlined, it is important for professionals to understand as quickly as possible what the original cause is. And you can only do this if you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;a visual representation of the entire infrastructure as a whole&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a clear understanding of the relationships and dependencies of its objects&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now I’ll show you how I found all this in Acure.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A cure not only for symptoms&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let me remind you that before getting a complete picture of the entire IT complex, I set up data flows and built a resource-service model using CIs and their connections. I will not delve into these processes again, which are described in detail here. During all these manipulations, I was presented with a visual topology in the form of a tree, showing the health of the IT infrastructure and the impact of one element on another.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dWlW9S-X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvOY3B0eYsTV06ZxN" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dWlW9S-X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvOY3B0eYsTV06ZxN" alt="" width="880" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the card of each configuration item, you can see its health, as well as dependencies with other elements. The health of each object is calculated based on the health of the affecting objects, as well as the monitoring events associated with it. The following are used as metrics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;the weight of the connection — used in assessing the “equivalent” effect;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a critical factor — the direct inheritance of health, suitable for critical nodes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BKjR9x9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2100/0%2AFl4G-pzq3fJmcuVI" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BKjR9x9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2100/0%2AFl4G-pzq3fJmcuVI" alt="" width="880" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to understand how the calculation takes place, the guys from Acure give a simple example in the documentation, which I also want to share for clarity:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;For example, the cluster contains 5 objects. The first object is a master, and if it fails, it does not matter what happens to the rest, the cluster will be broken. The remaining objects are additional “nodes”. All five objects weigh equal to 1, but the critical factor is put for the master. According to the model, if the master fails or degrades on it, the state of the cluster will not be better than that of the master. If one of the nodes fails, the cluster health will be 80%. Thus, the model allows quick assessment of the state of the entire IT environment.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thus, after any changes in the topology, the health of the system is instantly recalculated, coloring the entire tree in the appropriate colors. If the health of the root CI starts to turn traitorous red, you will see in detail which factors most negatively affect the object, and go through the branches in order to eventually come to the element that affected the health of the entire system. Easy!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yI3rc5fy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AInqZtIvVJQj82VlOv7obQQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yI3rc5fy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AInqZtIvVJQj82VlOv7obQQ.png" alt="" width="880" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations! You have just learned root cause analysis.&lt;/p&gt;

</description>
      <category>rootcause</category>
      <category>bigdata</category>
      <category>monitoring</category>
      <category>topology</category>
    </item>
    <item>
      <title>Auto discovering and auto actions in data monitoring or How to drink coffee instead of routine tasks</title>
      <dc:creator>ricklatham</dc:creator>
      <pubDate>Mon, 09 May 2022 12:36:42 +0000</pubDate>
      <link>https://dev.to/ricklatham/auto-discovering-and-auto-actions-in-data-monitoring-or-how-to-drink-coffee-instead-of-routine-tasks-2bhj</link>
      <guid>https://dev.to/ricklatham/auto-discovering-and-auto-actions-in-data-monitoring-or-how-to-drink-coffee-instead-of-routine-tasks-2bhj</guid>
      <description>&lt;p&gt;&lt;em&gt;Hi! I am Rick Latham. I am an IT engineer responsible for data monitoring in an American telecom company. Until today, I was just a humble reader and shy content consumer but after spending years of my life on routine manual activities and finally discovering a solution, I felt compelled to share. This is my first article here and hope that you will find it interesting and useful. I look forward to your feedback, but for now, make yourself comfortable, pour some coffee and enjoy!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Btw, about coffee…
&lt;/h2&gt;

&lt;p&gt;Drinking coffee with your legs on the table and looking at the green lights near all elements of the system is the dream of every IT engineer doing IT monitoring. But in my experience that is usually all it is, a dream. In my work, I support more than 100 different systems, services, and servers and this infrastructure expands, changes, acquires new items and connections constantly. I work with Zabbix and although it meets performance requirements, I need to monitor not only the IT infrastructure but also myself. If I don’t put new elements on monitoring, I will not receive the alerts when one of these elements doesn’t answer. Until, of course, angry users simulate a DDoS attack on the external interface of my department when one of the services is down.&lt;/p&gt;

&lt;p&gt;To avoid such incidents and ensure I don’t wake up in a cold sweat trying to remember whether I put a new configuration item on monitoring, I decided to find if there was a solution to automate these processes and assign this routine work to machines. This is how I found Acure. No, it is not a typo, it’s the name of an AIOps platform — the protagonist of this story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2poR0qVB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AwSKPUqRFtcy0nXKT" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2poR0qVB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AwSKPUqRFtcy0nXKT" alt="" width="741" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AIOps?
&lt;/h2&gt;

&lt;p&gt;I heard the term “Artificial Intelligence for IT operations”, or “AIOps”, a few years ago thanks to Gartner (who else?) This is the definition:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AIOps platforms utilize big data, modern machine learning and other advanced analytics technologies to directly and indirectly enhance IT operations (monitoring, automation and service desk) functions with proactive, personal and dynamic insight. AIOps platforms enable the concurrent use of multiple data sources, data collection methods, analytical (real-time and deep) technologies, and presentation technologies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In short there are two aspects to AIOps — big data and machine learning. And now you should see a clever picture.&lt;/p&gt;

&lt;p&gt;Ah, here it is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z0FZG5ud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ADOw4DpmiONDanpu2" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z0FZG5ud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ADOw4DpmiONDanpu2" alt="*The source: Gartner, Inc*" width="600" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The source: Gartner, Inc&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It was clear to see that for my case I would benefit from an AIOps platform but I needed to pick the right one. The problem I was running into was a serious cost barrier, since I didn’t have an Elon Musk sized budget. So I started looking into free solutions and found &lt;a href="https://acure.io/"&gt;Acure.io.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  A cure?
&lt;/h2&gt;

&lt;p&gt;A little background on Acure. Acure is a new incident control and automation platform created by a company out of Latvia and boy did they pack in a lot of features. It caught my attention since they market it as being made for &lt;strong&gt;engineers by engineers&lt;/strong&gt; which was huge for me since there is no one who understands all the pain points and insides of IT monitoring better than a fellow engineer. It boasts flexible and open architecture, root cause and impact analysis, topology models, a single screen for the state of the entire IT system, integrations with popular monitoring systems (including Zabbix of course), and a low-code engine. It all sounded great, especially the low-code because even though I’m an IT wizard, I am not a master at coding so I can make all the configurations and changes by myself.&lt;/p&gt;

&lt;p&gt;Soon Acure will release the SaaS version, but they also have an on-premise license for enterprises. I contacted the team, explained my demands and they kindly provided me an on-premise version so I could test it. I got to configure the data streams, automate the process of configuration item discovering, put it on monitoring and even start auto-healing scripts. All of these processes are fully described in the informative Acure User Guides.&lt;/p&gt;

&lt;p&gt;I only wrote about my case and showed my interface, settings, buttons, and scripts but don’t worry about lots of configurations. Once configured, Acure will make your future work processes the way easier.&lt;/p&gt;

&lt;p&gt;As I mentioned, Acure is a SaaS solution and on-premise versions are requested individually. Therefore, I will not focus on the installation process (in the SaaS version it will just mean creating space) and get straight to my points.&lt;/p&gt;
&lt;h2&gt;
  
  
  Aggregation and analysis of events from external systems
&lt;/h2&gt;

&lt;p&gt;At first, I set up a &lt;strong&gt;Data stream&lt;/strong&gt; to receive data from the other system. In Acure, this process is very easy and intuitive. In the section &lt;em&gt;Data Collection — Data Streams&lt;/em&gt; just press the &lt;em&gt;+Add stream&lt;/em&gt; button and fill in the following fields.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rU1k9FUL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ACKHMkuXw7HHi0lEcTJFl1A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rU1k9FUL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ACKHMkuXw7HHi0lEcTJFl1A.jpeg" alt="" width="757" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is a great feature that Acure allows you to choose a template of a popular monitoring system with preconfigured tasks and handlers. You don’t need to puzzle over a complex configuration since the system will do everything for you.&lt;/p&gt;

&lt;p&gt;As I’ve already said I am working with Zabbix so I’ve chosen its template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TymF83KU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AeVaQlrmnR5ZKXnNV5Alt6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TymF83KU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AeVaQlrmnR5ZKXnNV5Alt6w.png" alt="" width="760" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I connected Zabbix and Acure using the connection URL and logging into Zabbix.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_qcvP2ML--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3200/0%2AP6djVw_ycl5lgtK1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_qcvP2ML--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3200/0%2AP6djVw_ycl5lgtK1" alt="" width="880" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The configuration template already contains tasks for binding Zabbix to Acure, but in my case I needed to add one more custom task to take data from Zabbix for further topology creation. I wrote the script in YAML and made a request to the Zabbix API:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nBsjoQIv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3200/0%2AEgOJVir6OnKxLypg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nBsjoQIv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3200/0%2AEgOJVir6OnKxLypg" alt="" width="880" height="403"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jobs:
  - steps:
      - run: 'curl -H \"Content-Type: application/json\" -s --request POST --data-raw \"${zabbixGetHostsJson}\" ${zabbixUri}'
        env:
          zabbixUri: https://&amp;lt;zabbix-domain&amp;gt;/api_jsonrpc.php
          zabbixGetHostsJson: &amp;gt;
            {
            "jsonrpc": "2.0",
            "method": "host.get",
            "params": {
                "filter": {
                    "output": "extend"
                },
                "selectGroups": "extend"
            },
            "id": 1,
            "auth": "&amp;lt;zabbix-token&amp;gt;"
            }
        outputs:
          data: $._outputs.shell
    artifacts:
      - data: '{{ outputs.data }}'
        send-to:
          api:
            uri: https://&amp;lt;acure-domain&amp;gt;/api/public/cl/v1/stream-data
            headers:
              x-smon-stream-key: $.vars.stream.key
              x-smon-userspace-id: $.userspaceId
            media-type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script can easily be used as a template by inserting it manually and changing URL of primary system, the source for data receiving and token according to your data.&lt;/p&gt;

&lt;p&gt;The API token was taken from Zabbix:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--03qb1GQ5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2544/0%2AwJTwHj_cWVu7tXbI" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--03qb1GQ5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2544/0%2AwJTwHj_cWVu7tXbI" alt="" width="880" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then saved the changes and voila! The stream was added into Data Streams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4tSmYThF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A6jRxmF1CZDQ82Nn2" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4tSmYThF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A6jRxmF1CZDQ82Nn2" alt="" width="517" height="226"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tRB_59At--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AjmsXo-xHm8ijslDi" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tRB_59At--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AjmsXo-xHm8ijslDi" alt="" width="498" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The magic doesn’t stop here though. The task of topology data collecting cannot be run on the internal agent because of Security Policies. I had to connect the external agent before running it. That could sound a little bit complicated but it really isn’t that bad. Once this step is taken care of, you won’t need to worry about it again.&lt;/p&gt;

&lt;p&gt;I then added a New Coordinator and set up the custom agent inside it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FcTmNC-C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2A3kNfLtxi5Uog_ArchImpKg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FcTmNC-C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2A3kNfLtxi5Uog_ArchImpKg.jpeg" alt="" width="880" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hriyfd8Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2616/0%2AD9KgUAcbRD2Rcelj" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hriyfd8Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2616/0%2AD9KgUAcbRD2Rcelj" alt="" width="880" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting up, I returned to Data Stream and changed the agent in the manually added custom task to the newly created one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L1oaCJL7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AUExJNvGMUWvWJGau" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L1oaCJL7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AUExJNvGMUWvWJGau" alt="" width="624" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, I started the stream. In &lt;em&gt;Events and Logs&lt;/em&gt; I could check the events to make sure that the data was being collected by the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lWmR8Wmt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8dau8tqzn336fyjbzv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lWmR8Wmt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8dau8tqzn336fyjbzv2.png" alt="" width="880" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having “fallen” into one of the events reporting a problem, I saw not only its table view with information about all the elements contained in Zabbix but also the standard JSON structure for Zabbix, for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uLnY2ZE9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zojxemfl81kvgsibjms2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uLnY2ZE9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zojxemfl81kvgsibjms2.jpg" alt="*Info about the Zabbix hosts*" width="880" height="479"&gt;&lt;/a&gt; &lt;em&gt;Info about the Zabbix hosts&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TPD4AGyH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2964/0%2ALN0-VQTfu4skay5C" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TPD4AGyH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2964/0%2ALN0-VQTfu4skay5C" alt="*JSON structure for one of the Zabbix events*" width="880" height="465"&gt;&lt;/a&gt;&lt;em&gt;JSON structure for one of the Zabbix events&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Based on the events coming from the primary monitoring system, I built the Resource Service Model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building of Resource Service Model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The resource service model (RSM) is a list of configuration items (CI) from the system and the connections between them. In Acure, the RSM is based on topology but I won’t get ahead of myself. Let’s get back to the JSON structure. The following parameters is what the RSM is built on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qqj-8jTU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AeLEBFyA4RT2Y4t3q" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qqj-8jTU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AeLEBFyA4RT2Y4t3q" alt="" width="856" height="1232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For further automatic creation of configuration items I determined that:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CI’s name == host.name (Zabbix host name)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Parent CI’s name == host.groups[0].name&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related object =&amp;gt; Zabbix node&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the Automation section I added a new scenario for my Working Group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Itdbqum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2854/0%2AmYZSNvge8-g1AEvh" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Itdbqum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2854/0%2AmYZSNvge8-g1AEvh" alt="" width="880" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The process of scenario creation is clearly described in the documentation. After reading it and looking at a couple of examples, anyone can create a scenario of any complexity without any hard coding. The low-code engine makes this process very easy for non-programmers like me. Just add blocks, bind them, and create the script.&lt;/p&gt;

&lt;p&gt;Each scenario starts from the “OnLogEvent” block where you receive the topology events. Mine was no exception.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YKk7GM20--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A5916S6UvLzBZJzKn" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YKk7GM20--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A5916S6UvLzBZJzKn" alt="" width="196" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then checked the streams: my stream name was matching the value in the script (in my case, Zabbix Sync), so the script was executed further. If not, the script will not be executed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BpEXa-iV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2Ayuzn3dKXmhPDKeGr" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BpEXa-iV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2Ayuzn3dKXmhPDKeGr" alt="" width="796" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To grow the topology “bush” from one information system, I manually created a root CI through the CI creation option in the Service Model Graph tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lj8yS4U4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3200/0%2AMtsatWUHrUc1YAUb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lj8yS4U4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3200/0%2AMtsatWUHrUc1YAUb" alt="" width="880" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having created a CI, I took its ID from the link and pasted it into the following block in the script.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wL66J8Hp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AdhVPa9sHoUzzCbGf" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wL66J8Hp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AdhVPa9sHoUzzCbGf" alt="" width="445" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mpJcxkfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AHgMB9cwCGd4fbZGF" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mpJcxkfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AHgMB9cwCGd4fbZGF" alt="" width="360" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When creating a scenario, all groups were linked to this root CI, which displays the health of the entire system on the topology.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_P6LrQQg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2860/0%2A_lKlpSMrS2M-S3f2" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_P6LrQQg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2860/0%2A_lKlpSMrS2M-S3f2" alt="" width="880" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don’t want to spoil the topology just yet, so let’s return to creation of a single script, which can be conditionally divided into two parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Creation of configuration items (CI).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Binding the nodes of primary monitoring systems (for further binding of triggers).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I improved my script, made various checks, added the automatic creation of CIs and configured bindings between them, compiled and ran the scenario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--etjTO4_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2854/0%2ANxR2yS2jwyj8_umZ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--etjTO4_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2854/0%2ANxR2yS2jwyj8_umZ" alt="" width="880" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The execution of this script showed me the Service Model graph which displays the statuses of all components and the health of the system in real time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--603mvn4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AAg4D8c6FCbrcUzOc" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--603mvn4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AAg4D8c6FCbrcUzOc" alt="" width="880" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added new CIs to test auto discovering and immediately saw it on the map. To be sure that the system didn’t lie to me, I checked the addition of the new items in the Event Log. And wow! All the new CIs were added automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EcIrGIPm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AjzVCuee01paZlAqY" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EcIrGIPm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AjzVCuee01paZlAqY" alt="" width="711" height="823"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But I would not be me if I limited myself to auto discovering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto rules and auto actions
&lt;/h2&gt;

&lt;p&gt;As you already understood, Acure takes over some tasks and automates routine processes that were previously performed manually. I decided to check whether the system itself will be able to carry out the algorithm of certain actions and rules that will be triggered by certain changes in the CI.&lt;/p&gt;

&lt;p&gt;In the “Rules and Actions” section I added a New Rule for all CIs and events with a priority of 2 or higher.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--51KzoefW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2858/0%2A0vIO1uOJk1_is0v5" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--51KzoefW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2858/0%2A0vIO1uOJk1_is0v5" alt="" width="880" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I configured an automatic action that will be performed if this rule is triggered. In my case, these were two notifications by e-mail with an interval of 2 and 30 minutes and the execution of an auto-repair script if the incident has not been fixed during this time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DIi4UdKT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2854/0%2AQIXqnDE29t379vFn" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DIi4UdKT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2854/0%2AQIXqnDE29t379vFn" alt="" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alert templates are also configurable inside Acure. I used the preconfigured template but also was able to add any text and attach the necessary files using Markdown and HTML for markup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JcLuXzpO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AjQ6yfLGoka_21yil" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JcLuXzpO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AjQ6yfLGoka_21yil" alt="" width="693" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a result, when an event with a high priority is detected, this auto-action script should be be triggered: the necessary notifications get sent and the auto-healing will run. Automatically! While you’re comfortably drinking coffee with your legs on the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this article, using the Acure platform as an example, I showed why there is no reason to be nervous when it comes to delegating routine work to machines and how it can free up your time for more interesting tasks.&lt;/p&gt;

&lt;p&gt;The system has a convenient and intuitive interface and several cool features: the ability to integrate with other monitoring systems, topology, low-code, the status of the entire infrastructure on one screen, and full automation of processes ranging from setting configuration items for monitoring to running automatic scripts. When an event enters the system, it changes the Service Model itself or its state. Acure automatically allows the tracking of all these changes and takes actions related to them. Objects are automatically added, primary local monitoring system triggers are automatically bound, escalation policies are automatically propagated, system health is automatically calculated, and automation scripts are run.&lt;/p&gt;

&lt;p&gt;It’s great how such a simple solution can be so powerful. This is the result when monitoring systems are made by those who use these systems themselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IJebFJwg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AHoHgGDT4Ns9aIEZv" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IJebFJwg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AHoHgGDT4Ns9aIEZv" alt="" width="682" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also liked the development team — the guys were responsive, quickly answered questions and provided all the necessary information and licenses. Even though Acure is a young platform and it has something to strive for, I see huge potential.&lt;/p&gt;

&lt;p&gt;Soon the guys should release the new SaaS version, which I’ll be looking forward to while drinking coffee, of course ;)&lt;/p&gt;

&lt;p&gt;But for now share your thoughts, feedback and see you in comments.&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>machinelearning</category>
      <category>bigdata</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
