{"id":11554,"date":"2022-08-23T10:29:09","date_gmt":"2022-08-23T04:59:09","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=11554"},"modified":"2022-08-23T10:29:09","modified_gmt":"2022-08-23T04:59:09","slug":"a-detailed-guide-to-key-metrics-of-mongodb-monitoring","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2022\/08\/23\/a-detailed-guide-to-key-metrics-of-mongodb-monitoring\/","title":{"rendered":"A Detailed Guide to Key Metrics of MongoDB Monitoring"},"content":{"rendered":"\n<p>In the current era, organizations demand high-quality working data, and management systems that can scale, deploy quickly, robustly, are highly available, and highly secure for any unfortunate incidents. Traditionally, applications used relational databases as the primary data stores but in today\u2019s need for data-driven applications, developers lean towards alternative databases like NoSQL(Not Only Structured Query Language).<\/p>\n\n\n\n<p>NoSQL databases enable speed, flexibility, and scalability in this era of growing development in the cloud. Moreover, NoSQL databases also support JSON-like documents which are commonly used formats to share data in modern web applications.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/mongodb_exporter_logo.png?w=1024\" alt=\"\" class=\"wp-image-11584\" width=\"518\" height=\"147\" \/><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>MongoDB is an open-source NoSQL database that stores data in flexible, JSON-like documents gathered together in collections unlike data stored in a relational database in tables, rows, and columns, with the relationship of entities. MongoDB is a document-oriented database which means it works on principles of dealing with \u201cdocuments\u201d; it allows you to express data in its natural form, the way it\u2019s meant to be. Moreover, it provides more flexibility, as fields can vary from document to document and data structure can change over time as well.<\/p>\n\n\n\n<h2 class=\"has-medium-font-size wp-block-heading\"><strong>Need for<\/strong> <strong>Monitoring of MongoDB<\/strong><\/h2>\n\n\n\n<p>The database is an extremely critical component for the high performance of applications, and most of the time its performance is directly proportional to application performance. Yet in quite a few cases, organizations ignore this fact leading to performance degradation and incidentally failing to identify issues proactively. In addition, it also helps you calculate your database resource requirements in various situations and helps you provision your database with the right amount of resources in the future.<\/p>\n\n\n\n<p>In this blog, we are going to cover the key metrics which are needed to monitor the MongoDB database. We are using the Prometheus stack to capture the metrics using MongoDB exporter.<\/p>\n\n\n\n<h2 class=\"has-medium-font-size wp-block-heading\"><strong>Key Metrics of Mongodb we are collecting<\/strong> (<strong><a rel=\"noreferrer noopener\" href=\"https:\/\/grafana.com\/grafana\/dashboards\/16490\" target=\"_blank\">Mongodb Dashboard<\/a><\/strong>)<\/h2>\n\n\n\n<p><strong>MongoDB Service UP<\/strong>: This metric depicts whether your MongoDB database service is running on the server or not. So, prompt alerting on this one is self-explanatory.<\/p>\n\n\n\n<p><strong>MongoDB Uptime:<\/strong> How long was MongoDB service\/database running? This is a time-based metric and it will reset once the MongoDB service gets restarted. It is a frequently looked-up metric for troubleshooting, especially, in containerized environments.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>MongoDB Connections<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\">Once the database starts, it listens to a particular IP address and port for requests. This is how connections are established with clients. By running  <code>db.serverStatus().connections<\/code> we can check the current, total, and active connections of the MongoDB database. If we plot these connections in a graph with history, we can also measure the peak, normal, and low traffic time. This helps us schedule the patching and upgrading activities of databases and applications.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Instant increases in traffic can lead to performance issues. This can be visualized by using the current connections metric. It can notify about the drastic change in traffic patterns via alerting as well.<\/p>\n\n\n\n<ul><li><strong>Current Connections<\/strong>: The number of incoming connections from the client to the database server, also includes any shell connections or connections from other servers as well. <\/li><li><strong>Total Created Connections<\/strong>: Include all incoming connections created to the server, and includes connections that have since closed.<\/li><li><strong>Available Connections:<\/strong> The number of unused incoming connections available<\/li><li><strong>Active Connections:<\/strong> Number of client connections that currently have operations in progress.<\/li><\/ul>\n\n\n\n<p style=\"font-size:18px;\"><strong>OPCounters<\/strong><\/p>\n\n\n\n<p>A document that reports the average number of operations in a database by type since the MongoDB instance last started is known as OPCounters. We are going to monitor opcounters.insert, opcounters.query, opcounters.update, opcounters.delete, opcounters.getmore, and opcounters.command metrics from MongoDB which tell us the number of inserts, update, delete, getMore operations respectively. Moreover, also going to get the metrics about the number of queries and commands received on MongoDB.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Total Collections Per DB<\/strong><\/p>\n\n\n\n<p>It is always beneficial to track the total number of collections in MongoDB. A collection is a group of documents just like the tables in Relational databases. These metrics can help to keep a record of the number of collections per database.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Total Indexes Per DB<\/strong><\/p>\n\n\n\n<p>The indexes are special data structures that support the efficient execution of queries in MongoDB. It stores some information like the field or sub-field of the document to find the right data in less time. This metric lets you know how many indexes are created per DB.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Allocated Storage to Collections and Indexes<\/strong><\/p>\n\n\n\n<p>The metrics illustrate the total amount of storage in bytes allocated to each collection and index in the MongoDB database. So, for example, it is necessary to monitor these metrics in scenarios where a chunk of data got deleted. It will reflect in these metrics and should trigger an alert about this intended or unintended activity. It will also be helpful where storage drastically increases as it can lead to a crash of database service.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Replication Metrics<\/strong><\/p>\n\n\n\n<p>MongoDB can be deployed in Primary and Secondary replication mode over multiple servers which ensures that your database is highly available, and it can store your data in multiple physical partitions called shards. Normally, in a production environment replica set is recommended. So, we are going to monitor the following key metrics.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/mongodb_replication.png?w=1006\" alt=\"\" class=\"wp-image-11586\" width=\"391\" height=\"321\" \/><\/figure>\n\n\n\n<ul><li><strong>OPLog Size:&nbsp;<\/strong>The OPLog(Operation Logs) is a special capped collection that keeps a record of all operations that modify the data stored in your database. So this OPLog size should be consistent, if this is less than 25% or more than 50% this metric should trigger an alert.<\/li><li><strong>Replication Lag:&nbsp;<\/strong>In replication mode, the primary MongoDB server replicates its data to the secondary MongoDB server. For better performance this replication should be up to date and as fast as possible. Replication lags tell us how far a secondary MongoDB server is behind from Primary one. We want replication lag as small as possible. There can be multiple reasons like the issue with networking Latency or Throughput etc. So, this alert should trigger when replication lag crosses a particular threshold.<\/li><\/ul>\n\n\n\n<p style=\"font-size:18px;\"><strong>MongoDB Server Metrics<\/strong><\/p>\n\n\n\n<p>The monitoring and alerting of MongoDB server metrics are as important as capturing the MongoDB Database metrics. For example, CPU, and memory utilization of the server. This can tell us the overall load on the server, the server can also crash because of a high load, or your MongoDB service consumes the whole memory of the server. So, decide on a suitable threshold like 70% or 80%, and trigger an alert whenever utilization of these metrics crosses this threshold. Apart from that, we also need to consider Network I\/O and Disk I\/O metrics as well. If these metrics cross the threshold on regular basis with the normal working of the application and normal traffic, it indicates that we have under-provisioned our MongoDB cluster.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Tools We are going to use to Monitor MongoDB<\/strong><\/p>\n\n\n\n<ul><li><strong>Prometheus<\/strong>&nbsp;&#8211; An open-source time series database for event monitoring and alert manager by Cloud Native Computing Foundation(CNCF).<\/li><li><strong>Grafana<\/strong>&nbsp;&#8211; An open-source project used for analytics and visualizations of the metrics from any database.<\/li><li><strong>MongoDB Exporter<\/strong>&nbsp;&#8211; A Prometheus exporter which acts like an agent to publish the metrics (http:\/\/your_server_ip:9216\/metrics)<\/li><li><strong>Node Exporter<\/strong>&nbsp;&#8211; Another Prometheus exporter is used to collect server metrics, such as CPU and memory utilization, disk space-related metrics, etc.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/promtheus_arch.png?w=1024\" alt=\"\" class=\"wp-image-11588\" width=\"468\" height=\"242\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px;\"><strong>Setup MongoDB Exporter<\/strong><\/p>\n\n\n\n<p>We are going to use MongoDB Exporter developed by&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/percona\/mongodb_exporter\" target=\"_blank\">Percona<\/a>. In the following steps, we will run MongoDB Exporter as a service along with Node Exporter on the MongoDB Server.<\/p>\n\n\n\n<p>To isolate the ownership of the Prometheus Exporters services, we will create separate users without a home directory and shell so that nobody can log in to these users.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo useradd --no-create-home --shell \/bin\/false exporter<\/code><\/pre>\n\n\n\n<p>Afterward, Download the latest MongoDB Exporter from&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/percona\/mongodb_exporter\/releases\" target=\"_blank\">here<\/a>. Extract the archive file and copy the binary file to <code>\/use\/local\/bin<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/github.com\/percona\/mongodb_exporter\/releases\/download\/v0.34.0\/mongodb_exporter-0.34.0.linux-amd64.tar.gz\n\ntar xvzf mongodb_exporter-0.34.0.linux-amd64.tar.gz\n\nsudo mv mongodb_exporter \/usr\/local\/bin\/<\/code><\/pre>\n\n\n\n<p>Now change the ownership of the binary file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chown exporter:exporter \/usr\/local\/bin\/mongodb_exporter<\/code><\/pre>\n\n\n\n<p>Accessing MongoDB should be authenticated and authorized. MongoDB Exporter going to get metrics from MongoDB Cluster. So, we need a user who can authenticate the MongoDB Database and should have the right set of permissions to read all the data. We need to create an Administrator account with clusterMonitor role.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>use admin\n\ndb.createUser(\n  {\n    user: \"mongodb_exporter\",\n    pwd: \"password\",\n    roles: &#091;\n        { role: \"clusterMonitor\", db: \"admin\" },\n        { role: \"read\", db: \"local\" }\n    ]\n  }\n)<\/code><\/pre>\n\n\n\n<p>The output should be like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Successfully added user: {                        \n        \"user\" : \"mongodb_exporter\",              \n        \"roles\" : &#091;                               \n                {                                 \n                        \"role\" : \"clusterMonitor\",\n                        \"db\" : \"admin\"            \n                },                                \n                {                                 \n                        \"role\" : \"read\",          \n                        \"db\" : \"local\"            \n                }                                 \n        ]                                         \n}  <\/code><\/pre>\n\n\n\n<p>Now We have to run the MongoDB Exporter service with the above mongodb_exporter user authentication with the following command in which we are going to provide the <code>MONGODB_URI<\/code> the parameter in the command line.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/local\/bin\/mongodb_exporter --mongodb.uri=mongodb:\/\/mongodb_exporter:password@localhost:27017 --collect-all<\/code><\/pre>\n\n\n\n<p>Now we have MongoDB Exporter binary, user, and mongodb_exporter user to authenticate the Database. The next step would be to create a service to run MongoDB Exporter Binary and collect metrics. Create the following file in <code>\/etc\/systemd\/system\/<\/code> directory to create a mongodb_exporter service.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;Unit]\nDescription=Mongodb Exporter\nWants=network-online.target\nAfter=network-online.target\n\n&#091;Service]\nUser=exporter\nGroup=exporter\nType=simple\nExecStart=\/usr\/local\/bin\/mongodb_exporter --mongodb.uri=mongodb:\/\/mongodb_exporter:password@localhost:27017 --collect-all\n\n&#091;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p>To use the newly created service, reload&nbsp;<code>systemd<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload<\/code><\/pre>\n\n\n\n<p>We can restart the service after reloading the system daemon.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start mongodb_exporter.service<\/code><\/pre>\n\n\n\n<p>To check the status of the service, run the following command.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status mongodb_exporter.service<\/code><\/pre>\n\n\n\n<p>If we want to make sure that MongoDB Exporter service runs even after rebooting the server as well, we need to enable the service.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable mongodb_exporter.service<\/code><\/pre>\n\n\n\n<p style=\"font-size:18px;\"><strong>Setup Node Exporter<\/strong><\/p>\n\n\n\n<p>Download the latest Node Exporter binary,  click <a href=\"https:\/\/github.com\/prometheus\/node_exporter\/releases\" target=\"_blank\" rel=\"noopener\">here<\/a><\/p>\n\n\n\n<p>To set up the Node Exporter through Ansible, click <a href=\"https:\/\/galaxy.ansible.com\/opstree_devops\/prometheus_exporters\" target=\"_blank\" rel=\"noopener\">here<\/a><\/p>\n\n\n\n<p>To Install Node Exporter on Linux with Systemd service, click <a href=\"https:\/\/opstree.com\/blog\/\/2018\/05\/08\/prometheus-overview-and-setup\/\">here<\/a>.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Setup Prometheus<\/strong><\/p>\n\n\n\n<p>Download the latest <strong>Prometheus<\/strong> binary from <a href=\"https:\/\/prometheus.io\/download\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<p>To set up The Prometheus through Ansible, please click <a href=\"https:\/\/galaxy.ansible.com\/opstree_devops\/prometheus\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<p>If you want to install Prometheus as a service, you can follow the steps from <a href=\"https:\/\/opstree.com\/blog\/\/2018\/05\/08\/prometheus-overview-and-setup\/\">here<\/a>.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Setup Grafana<\/strong><\/p>\n\n\n\n<p>To Download and Install Grafana please check <a href=\"https:\/\/grafana.com\/grafana\/download\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<p>To Set up the Grafana through Ansible, please click <a href=\"https:\/\/galaxy.ansible.com\/opstree_devops\/grafana\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Configure MongoDB Exporter and Node Exporter with Prometheus<\/strong><\/p>\n\n\n\n<p>To Configure MongoDB Exporter and Node Exporter with Prometheus, we need to add the following configuration in <code>prometheus.yml<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- job_name: 'mongodb'\n  scrape_interval: 5s\n  static_configs:\n    - targets: &#091;'mongodb_exporter_ip:9216', 'mongodb_exporter_ip:9100']<\/code><\/pre>\n\n\n\n<p>In targets, we need to add the server IP where exporters are running, and 9216 and 9100 is the port of MongoDB and Node Exporter.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Set Prometheus As Data Source<\/strong> in Grafana<\/p>\n\n\n\n<p>Firstly we need to add Prometheus as the data source in Grafana to fetch the metrics data. Add the Datasource like below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"841\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/prometheus_data_srouce.webp?w=567\" alt=\"\" class=\"wp-image-11582\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Import <a href=\"https:\/\/grafana.com\/grafana\/dashboards\/16490-opstree-mongodb-dashboard\/\" target=\"_blank\" rel=\"noopener\">MongoDB Dashboard<\/a> in Grafana<\/strong><\/p>\n\n\n\n<p>After setting up Prometheus as a data source, we are going to import the MongoDB dashboard with the ID. This Id is a unique ID given by Grafana when we upload a custom dashboard.<br>We need to click the Plus sign on the left menu bar from the Garfana homepage. Then click on the import, we will be on the import page, where we can provide a unique Garfana Dashboard ID and then load the dashboard. In this blog, we are going to import <code>https:\/\/grafana.com\/grafana\/dashboards\/16490-opstree-mongodb-dashboard\/<\/code> this dashboard and the ID of this dashboard is 16490.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/import_page-1.png?w=1024\" alt=\"\" class=\"wp-image-11606\" width=\"630\" height=\"407\" \/><\/figure>\n\n\n\n<p><br>Or if we have a Dashboard in JSON format, or we downloaded the dashboard, we can import it by uploading the JSON file from the local machine.<\/p>\n\n\n\n<p style=\"font-size:18px;\"><strong>Screenshots of MongoDB Dashboard created by us<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/mongodb_dashboard_1-1.png?w=1024\" alt=\"\" class=\"wp-image-11608\" width=\"800\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/mongodb_dashboard_2-1.png?w=1024\" alt=\"\" class=\"wp-image-11609\" width=\"800\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/mongodb_dashboard_3-1.png?w=1024\" alt=\"\" class=\"wp-image-11611\" width=\"800\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Conclusion<\/strong><\/p>\n\n\n\n<p>The purpose of this blog was to dig a little deeper into MongoDB Concepts. The use of the MongoDB database and identifying the key metrics which can be monitored. We also set up a fully operational end-to-end monitoring pipeline for MongoDB with respect to the metrics we talked about in this blog. We published the custom dashboard in Grafana, check&nbsp;<a href=\"https:\/\/grafana.com\/grafana\/dashboards\/16490-opstree-mongodb-dashboard\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<p>Now, in our next blog, we will talk about MongoDB Monitoring from an SRE perspective.<\/p>\n\n\n\n<p>Want to check other dashboards published by us, please check&nbsp;<a href=\"https:\/\/grafana.com\/orgs\/opstreedevops\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<p><strong>Blog Pundits: <a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/naveenverma023\/\" target=\"_blank\">Naveen Verma<\/a> and <a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/sandeep7c51ad81ba\/\" target=\"_blank\">Sandeep Rawat<\/a><\/strong><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/www.opstree.com\/contact-us?utm_source=WordPress&amp;utm_medium=Blog&amp;utm_campaign=A_Detailed_Guide_to_Key_Metrics_of_MongoDB_Monitoring\" target=\"_blank\" rel=\"noreferrer noopener\">Opstree<\/a><\/strong>\u00a0is an End to End DevOps solution provider.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.opstree.com\/contact-us?utm_source=WordPress&amp;utm_medium=Blog&amp;utm_campaign=A_Detailed_Guide_to_Key_Metrics_of_MongoDB_Monitoring\" target=\"_blank\" rel=\"noreferrer noopener\">Contact Us<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Connect with Us<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In the current era, organizations demand high-quality working data, and management systems that can scale, deploy quickly, robustly, are highly available, and highly secure for any unfortunate incidents. Traditionally, applications used relational databases as the primary data stores but in today\u2019s need for data-driven applications, developers lean towards alternative databases like NoSQL(Not Only Structured Query &hellip; <a href=\"https:\/\/opstree.com\/blog\/2022\/08\/23\/a-detailed-guide-to-key-metrics-of-mongodb-monitoring\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A Detailed Guide to Key Metrics of MongoDB Monitoring&#8221;<\/span><\/a><\/p>\n","protected":false},"author":173860259,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[768739308,223796770,21954763,97141521,768739293,768739287],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-30m","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/11554"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/173860259"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=11554"}],"version-history":[{"count":25,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/11554\/revisions"}],"predecessor-version":[{"id":29872,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/11554\/revisions\/29872"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=11554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=11554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=11554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}