{"id":107,"date":"2023-04-04T09:05:00","date_gmt":"2023-04-04T09:05:00","guid":{"rendered":"https:\/\/cloudtechner.com\/blog\/?p=107"},"modified":"2024-06-13T11:06:45","modified_gmt":"2024-06-13T11:06:45","slug":"log-management-and-distributed-tracing-using-grafana-loki-and-tempo","status":"publish","type":"post","link":"https:\/\/cloudtechner.com\/blog\/log-management-and-distributed-tracing-using-grafana-loki-and-tempo\/","title":{"rendered":"Log Management and Distributed Tracing using Grafana Loki and Tempo"},"content":{"rendered":"\n<p>Author: <a href=\"https:\/\/www.linkedin.com\/in\/navneet-guraya-87aa34183\">Navneet Singh Guraya<\/a>, Associate Engineer &#8211; CloudDevOps<\/p>\n\n\n<div class=\"taxonomy-post_tag wp-block-post-terms\"><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/grafana\/\" rel=\"tag\">Grafana<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/log-management\/\" rel=\"tag\">Log Management<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/loki\/\" rel=\"tag\">Loki<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/monitoring\/\" rel=\"tag\">Monitoring<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/observability\/\" rel=\"tag\">Observability<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/step-by-step-guide\/\" rel=\"tag\">Step-by-Step Guide<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/cloudtechner.com\/blog\/tag\/tempo\/\" rel=\"tag\">Tempo<\/a><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p id=\"6d2d\">Monitoring is a crucial part of any IT systems. Monitoring is the task of assessing the health of a system by collecting and analysing aggregate data from different IT systems based on a predefined set of metrics and logs. In general, monitoring measures the health of the application, such as creating a rule that alerts when the app is nearing 80% CPU usage, helping prevent downtime. in IT systems Monitoring is not new, organisations have been using monitoring tools to monitor their systems since long. However, monitoring has its limitations. For monitoring to work, we need to know what metrics and logs to track. If we have not predicted a problem, it can miss key production failures and other issues.<\/p>\n\n\n\n<p id=\"35c1\">Due to great benefits of micro-services based applications, organisations are now depending more and more on distributed architectures to provide application services. As systems and applications are becoming more complex, organisation are realising implementing just Monitoring tools is not sufficient for them. They need more than a monitoring tool which has the ability to understand a complex system\u2019s internal state based on external outputs. In short they need monitoring systems which can work on Pro-active approach not the reactive one which traditional monitoring tools provide and thats where&nbsp;<strong>Observability&nbsp;<\/strong>comes into picture. Observability tools go deeper than monitoring internal states and troubleshooting problems. These platforms help teams solve problems faster, which in turn, optimizes pipelines and gives more time for core business operations and innovation.<\/p>\n\n\n\n<p id=\"5309\">With observability, collecting the measurements of logs, metrics, and distributed traces are the three key pillars to achieving success.<\/p>\n\n\n\n<ol>\n<li><strong>Logs<\/strong>: These are structured or unstructured text records of discreet events that occurred at a specific time.<\/li>\n\n\n\n<li><strong>Metrics:<\/strong>&nbsp;These are the values represented as counts or measures that are often calculated or aggregated over a period of time. Metrics can originate from a variety of sources, including infrastructure, hosts, services, cloud platforms, and external sources.<\/li>\n\n\n\n<li><strong>Distributed tracing:<\/strong>&nbsp;This displays activity of a transaction or request as it flows through applications and shows how services connect, including code-level details.<\/li>\n<\/ol>\n\n\n\n<p id=\"6d04\">Logs and Distributed tracing are important aspect of any&nbsp;<strong>Observability&nbsp;<\/strong>platform. This blog explains instructions to setup Log management and distributed tracing using popular Open source observability platform Grafana and Grafana plugins Grafana LOKI and Grafana Tempo<\/p>\n\n\n\n<p id=\"6ba0\">Before we move into setup, let us look at the basics of Grafana, Grafana LOKI and Grafana Tempo<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a70b\">Grafana<\/h3>\n\n\n\n<p id=\"5485\">Grafana is a popular open-source interactive visualisation platform which allows users to see their data via charts and graphs that are unified into one dashboard for easier interpretation and understanding. We can also query and set alerts based on the metrics and thresholds. Grafana supports traditional server environments, Kubernetes Clusters and various Cloud Services. Being an open-source tool Grafana is Cloud Agnostics tool. When it comes to modern micro-services applications, Grafana integrates very well and can visualize deep level information of each micro-service.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"b85d\">Grafana LOKI<\/h3>\n\n\n\n<p id=\"c8b3\">Loki is a horizontally scalable, highly available, multi-tenant log aggregation solution. It\u2019s designed to be both affordable and simple to use. Rather than indexing the contents of the logs, it uses a set of labels for each log stream.<\/p>\n\n\n\n<p id=\"1def\">Grafana Loki was inspired by Prometheus\u2019 architecture, which uses labels to index data. This allows Loki to store indexes in less amount of space. Furthermore, Loki\u2019s design is fully compatible with Prometheus, allowing developers to apply the same label criteria across the two platforms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"9437\">Grafana Tempo<\/h3>\n\n\n\n<p id=\"348c\">Grafana Tempo is an open source, easy-to-use, and high-scale distributed tracing backend. Tempo is cost-efficient, requiring only object storage to operate, and is deeply integrated with Grafana, Prometheus, and Loki. Tempo can ingest common open source tracing protocols, including Jaeger, Zipkin, and OpenTelemetry<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4aad\">Grafana LOKI and Grafana Tempo Architecture<\/h3>\n\n\n\n<p id=\"d04a\">Below architecture explains how Grafana collects and monitor logs and tracing using Grafana LOKI and Grafana Tempo Extensions.<\/p>\n\n\n\n<ul>\n<li>For Logging, real time logs are collected using Fluent bit plugin deployed on each application servers and sent to centralized log management tool called&nbsp;<strong>LOKI<\/strong>. Then using Grafana LOKI data source in Grafana, these logs are visualized in Grafana Dashboard.<\/li>\n\n\n\n<li>For distributed tracing, Open Telemetry Collector receive, process and export telemetry data to to tracing backend Grafana Tempo. Then using Grafana Tempo data source in Grafana, these traces are visualized in Grafana Dashboard.<\/li>\n\n\n\n<li>Tempo and Loki both integrate with S3 buckets to store the data. This relieves you from maintaining and indexing storage that, depending on your requirements, might not be needed.<\/li>\n\n\n\n<li>Tempo and Loki are part of&nbsp;<a href=\"https:\/\/grafana.com\/oss\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>. Therefore, it integrates seamlessly with Grafana dashboards.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"dfd8\">Setup Instructions<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"a1f3\">Pre-requisites<\/h5>\n\n\n\n<p id=\"d78d\">This blog assumes that following components are already provisioned or installed.<\/p>\n\n\n\n<ul>\n<li>Kuberenetes Cluster<\/li>\n\n\n\n<li>Grafana Deployed on Kubernetes Cluster \u2014 Setup instructions can be found here&nbsp;<a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/setup-grafana\/installation\/kubernetes\/\" target=\"_blank\" rel=\"noreferrer noopener\">Deploy Grafana on Kubernetes | Grafana documentation<\/a><\/li>\n\n\n\n<li>Helm Charts installed on local system.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"b535\">Steps to setup Grafana LOKI and Grafana Tempo<\/h4>\n\n\n\n<ol>\n<li>Lets create the separate namespace for Grafana resources<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create ns tracing<\/code><\/pre>\n\n\n\n<p id=\"65a5\">2. Now we will use grafana helm chart to install Grafana Temp and Grafana LOKI. Initialise Grafana Helm chart repository and update the repository<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>helm repo add grafana https:\/\/grafana.github.io\/helm-charts<br>helm repo update<\/code><\/pre>\n\n\n\n<p id=\"3cf9\">3. Deploy Grafana Tempo using helm chart<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>helm install tempo grafana\/tempo --version 0.7.4 -n tracing -f - &lt;&lt; 'EOF'<br>tempo:<br> extraArgs:<br>   \"distributor.log-received-traces\": true<br> receivers:<br>   zipkin:<br>   otlp:<br>     protocols:<br>       http:<br>       grpc:<br>EOF<\/code><\/pre>\n\n\n\n<p id=\"e251\">** \u2014 version will change in future please refer to the&nbsp;<a href=\"https:\/\/github.com\/grafana\/helm-charts\/tree\/main\/charts\/tempo\" rel=\"noreferrer noopener\" target=\"_blank\">link<\/a>&nbsp;to check the latest version.<\/p>\n\n\n\n<p id=\"9b55\">4. Deploy Grafana LOKI stack using helm charts.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>helm install loki grafana\/loki-stack --version 2.7.0 -n tracing -f - &lt;&lt; 'EOF'<br>fluent-bit:<br> enabled: false<br>promtail:<br> enabled: true<br>prometheus:<br> enabled: false<br> alertmanager:<br>   persistentVolume:<br>     enabled: false<br> server:<br>   persistentVolume:<br>     enabled: false<br>EOF<\/code><\/pre>\n\n\n\n<p id=\"38a2\">Above you can include and exclude the persistent volume, promtail, fluent-bit, Prometheus by making True or false.<\/p>\n\n\n\n<p id=\"342f\">**if you are using LOKI, so promtail must have to enabled.<\/p>\n\n\n\n<p id=\"6840\">5. Now, let\u2019s deploy Open-telemetry Collector. You use this component to distribute the traces across your infrastructure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -n tracing -f https:\/\/raw.githubusercontent.com\/antonioberben\/examples\/master\/opentelemetry-collector\/otel.yaml<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -n tracing -f - &lt;&lt; 'EOF'<br>apiVersion: v1<br>kind: ConfigMap<br>metadata:<br> name: otel-collector-conf<br> labels:<br>   app: opentelemetry<br>   component: otel-collector-conf<br>data:<br> otel-collector-config: |<br>   receivers:<br>     zipkin:<br>       endpoint: 0.0.0.0:9411<br>   exporters:<br>     otlp:<br>       endpoint: tempo.tracing.svc.cluster.local:55680<br>       insecure: true<br>   service:<br>     pipelines:<br>       traces:<br>         receivers: &#91;zipkin]<br>         exporters: &#91;otlp]<br>EOF<\/code><\/pre>\n\n\n\n<p id=\"02fb\">6. Deploy fluent-bit component. You will use this component to scrap the log traces from your cluster:<\/p>\n\n\n\n<p id=\"a5f7\">(Note: In the configuration you are specifying to take only containers which match the following pattern&nbsp;<code>\/var\/log\/containers\/*.log<\/code>) in line number 16 of the below file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>helm repo add fluent https:\/\/fluent.github.io\/helm-charts\n\nhelm repo update<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>helm install fluent-bit fluent\/fluent-bit --version 0.16.1 -n tracing -f - &lt;&lt; 'EOF'<br>logLevel: trace<br>config:<br> service: |<br>   &#91;SERVICE]<br>       Flush 1<br>       Daemon Off<br>       Log_Level trace<br>       Parsers_File custom_parsers.conf<br>       HTTP_Server On<br>       HTTP_Listen 0.0.0.0<br>       HTTP_Port {{ .Values.service.port }}<br> inputs: |<br>   &#91;INPUT]<br>       Name tail<br>       Path \/var\/log\/containers\/*.log<br>       Parser cri<br>       Tag kube.*<br>       Mem_Buf_Limit 5MB<br> outputs: |<br>   &#91;OUTPUT]<br>       name loki<br>       match *<br>       host loki.tracing.svc<br>       port 3100<br>       tenant_id \"\"<br>       labels job=fluentbit<br>       label_keys $trace_id<br>       auto_kubernetes_labels on<br> customParsers: |<br>   &#91;PARSER]<br>       Name cri<br>       Format regex<br>       Regex ^(?&lt;time&gt;&#91;^ ]+) (?&lt;stream&gt;stdout|stderr) (?&lt;logtag&gt;&#91;^ ]*) (?&lt;message&gt;.*)$<br>       Time_Key    time<br>       Time_Format %Y-%m-%dT%H:%M:%S.%L%z<br>EOF<\/code><\/pre>\n\n\n\n<p id=\"fa3d\">7. This component is already configured to connect to Loki and Tempo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>helm install grafana grafana\/grafana -n tracing --version 6.13.5  -f - &lt;&lt; 'EOF'<br>datasources:<br> datasources.yaml:<br>   apiVersion: 1<br>   datasources:<br>     - name: Tempo<br>       type: tempo<br>       access: browser<br>       orgId: 1<br>       uid: tempo<br>       url: http:\/\/tempo.tracing.svc:3100<br>       isDefault: true<br>       editable: true<br>     - name: Loki<br>       type: loki<br>       access: browser<br>       orgId: 1<br>       uid: loki<br>       url: http:\/\/loki.tracing.svc:3100<br>       isDefault: false<br>       editable: true<br>       jsonData:<br>         derivedFields:<br>           - datasourceName: Tempo<br>             matcherRegex: \"traceID=(\\\\w+)\"<br>             name: TraceID<br>             url: \"$${__value.raw}\"<br>             datasourceUid: tempo<br><br>env:<br> JAEGER_AGENT_PORT: 6831<br><br>adminUser: admin<br>adminPassword: password<br><br>service:<br> type: LoadBalancer<br><br>EOF<\/code><\/pre>\n\n\n\n<p id=\"0aac\">In the above Grafana Helm Chart we are defining the both Data Source of grafana with the help of datasource.yaml i.e. Tempo and Loki<\/p>\n\n\n\n<p id=\"bc2d\">we can also define the another data source in the Grafana in two ways:<\/p>\n\n\n\n<p id=\"2f4e\">a. In the Grafana UI we can go to the datasource and select the data source which we want to add and the url which we have to give is&nbsp;<code>http:\/\/&lt;service_name&gt;.&lt;namespace&gt;.svc:&lt;service_port&gt;<\/code><\/p>\n\n\n\n<p id=\"fab7\">b. Another option is to add new data source in the datasource.yaml, provide the configuration for the data source as shown in the above file, we can make any data source as default.<\/p>\n\n\n\n<p id=\"b3f9\">8. Once everything is deployed lets see the status of each components in Kuberentes cluster<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*Nzi88oyCEOa5h5ow8EOQJQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"7298\">In the above screenshot we can see that number of pod that are running in our cluster for Grafana and Tempo Setup. Here we are using Fluent-bit and promtail as a daemon set. We can see Pod for Grafana, Loki and Tempo also running<\/p>\n\n\n\n<p id=\"c154\">9. Check the status of services deployed in kubernetes cluster<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*frjD3viSW8EETUdkWDkauw.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"99a1\">In the above screenshot, we can see that number of services are created for resources that we had deployed for Setting the Grafana, Loki and Tempo.<\/p>\n\n\n\n<p id=\"b05a\">10. Now we will login to Grafana UI with the service url that provided in above screenshot, with the username and password are provided when we are executing the helm chart of the Grafana<\/p>\n\n\n\n<p id=\"0c11\">11. Click on Explore, You will there are two data source&nbsp;<strong>LOKI&nbsp;<\/strong>and&nbsp;<strong>Tempo&nbsp;<\/strong>and in the Grafana datasource.yaml we had defined the&nbsp;<strong>Tempo&nbsp;<\/strong>as default data source.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*q0aI7BA7xxphWL5fA0Qezg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"aa83\">12. Select&nbsp;<strong>LOKI&nbsp;<\/strong>as the current data source. You will see the interface like below mentioned.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*mH0uVJjsQMqgB9n-wockzQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"4920\">13. Click on the&nbsp;<strong>log browser button,&nbsp;<\/strong>you will the different labels as shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*Ta9ULZEVI1AfgWJ-DT--7g.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"9fea\">Here&nbsp;<strong>LOKI&nbsp;<\/strong>provide the log filtration on the basis of labels, you can we have different labels like pod, namespace, node_name, release, app, containers, etc .<\/p>\n\n\n\n<p id=\"1644\">14. Now what we will do here is let take example of Grafana pod and we will see the logs of Grafana Pod.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*s0rwc3uexkQogSP7UIkeDg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"7a26\">Here we are selecting label as a pod and in the pod section we can see we have 24 Pod, we can filter out on basis of labels as well. example: filtering on the basis of namespace or container or node or app. When we select our Grafana Pod, In the 3rd step Loki will show the result of our query and after clicking on the button of&nbsp;<strong>Show logs<\/strong>&nbsp;you will able to see the logs in the Grafana.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*iOCmXqvhCIR4sva7uQSeOQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"512e\">15. Expand any log trace, you can see the detailed logs of Grafana Pod and you will also notice&nbsp;<strong>TraceID<\/strong>&nbsp;field is detected in the logs. Once you expand the logs you will also notice Tempo button in front of&nbsp;<strong>TraceID&nbsp;<\/strong>field<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*PBYIlFuUi7DBqLIpX7V7WA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"96f1\">16. You can see the Services and the Operation of the Trace ID we had provided into the&nbsp;<strong>Tempo<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*xtAikCSKe2ILf-TDS3GLjQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"3680\">17. In the New version of Tempo (currently in beta ), there is a node graph where we can see the connected hub from where our Traces passed.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*o0Q18Q2WCTPPVfYmMRkORQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"5dd4\">As we can see above how we can see the logs and distributed tracing using Grafana LOKI and Temp. Hope this was helpful in getting up and running with Grafana Loki &amp; Tempo.<\/p>\n\n\n\t<div id=\"respond\" class=\"comment-respond wp-block-post-comments-form\">\n\t\t<h3 id=\"reply-title\" class=\"comment-reply-title\">Leave a Reply <small><a rel=\"nofollow\" id=\"cancel-comment-reply-link\" href=\"\/blog\/wp-json\/wp\/v2\/posts\/107#respond\" style=\"display:none;\">Cancel reply<\/a><\/small><\/h3><form action=\"https:\/\/cloudtechner.com\/blog\/wp-comments-post.php\" method=\"post\" id=\"commentform\" class=\"comment-form\"><p class=\"comment-notes\"><span id=\"email-notes\">Your email address will not be published.<\/span> <span class=\"required-field-message\">Required fields are marked <span class=\"required\">*<\/span><\/span><\/p><p class=\"comment-form-comment\"><label for=\"comment\">Comment <span class=\"required\">*<\/span><\/label> <textarea id=\"comment\" name=\"comment\" cols=\"45\" rows=\"8\" maxlength=\"65525\" required=\"required\"><\/textarea><\/p><p class=\"comment-form-author\"><label for=\"author\">Name <span class=\"required\">*<\/span><\/label> <input id=\"author\" name=\"author\" type=\"text\" value=\"\" size=\"30\" maxlength=\"245\" autocomplete=\"name\" required=\"required\" \/><\/p>\n<p class=\"comment-form-email\"><label for=\"email\">Email <span class=\"required\">*<\/span><\/label> <input id=\"email\" name=\"email\" type=\"text\" value=\"\" size=\"30\" maxlength=\"100\" aria-describedby=\"email-notes\" autocomplete=\"email\" required=\"required\" \/><\/p>\n<p class=\"comment-form-url\"><label for=\"url\">Website<\/label> <input id=\"url\" name=\"url\" type=\"text\" value=\"\" size=\"30\" maxlength=\"200\" autocomplete=\"url\" \/><\/p>\n<p class=\"comment-form-cookies-consent\"><input id=\"wp-comment-cookies-consent\" name=\"wp-comment-cookies-consent\" type=\"checkbox\" value=\"yes\" \/> <label for=\"wp-comment-cookies-consent\">Save my name, email, and website in this browser for the next time I comment.<\/label><\/p>\n<p class=\"form-submit\"><span class=\"bloghash-submit-form-button\"><input name=\"submit\" type=\"submit\" id=\"submit\" class=\"submit\" value=\"Post Comment\" \/><\/span> <input type='hidden' name='comment_post_ID' value='107' id='comment_post_ID' \/>\n<input type='hidden' name='comment_parent' id='comment_parent' value='0' \/>\n<\/p><\/form>\t<\/div><!-- #respond -->\n\t\n\n\n<p><a href=\"https:\/\/medium.com\/@navneetsinghguraya?source=post_page-----b9c56392bae7--------------------------------\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Author: Navneet Singh Guraya, Associate Engineer &#8211; CloudDevOps Monitoring is a crucial part of any IT systems. Monitoring is the task of assessing the health of a system by collecting&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56,64,65],"tags":[59,57,60,58,62,63,61],"_links":{"self":[{"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/posts\/107"}],"collection":[{"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/comments?post=107"}],"version-history":[{"count":3,"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions"}],"predecessor-version":[{"id":148,"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions\/148"}],"wp:attachment":[{"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/media?parent=107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/categories?post=107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudtechner.com\/blog\/wp-json\/wp\/v2\/tags?post=107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}