<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Network Monitoring &#8211; Best DevOps</title>
	<atom:link href="https://www.bestdevops.com/tag/network-monitoring/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bestdevops.com</link>
	<description>Lets Learn, Do it &#38; Share! Thats a Best DevOps!!!</description>
	<lastBuildDate>Wed, 14 Oct 2026 13:29:36 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Network Monitoring Tools: Key Platforms, Market Segments, and What to Evaluate</title>
		<link>https://www.bestdevops.com/network-monitoring-tools-market-may-set-new-growth-story-riverbed-zenoss-nagios-2/</link>
					<comments>https://www.bestdevops.com/network-monitoring-tools-market-may-set-new-growth-story-riverbed-zenoss-nagios-2/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Fri, 19 Jun 2020 05:07:33 +0000</pubDate>
				<category><![CDATA[IT Monitoring]]></category>
		<category><![CDATA[COVID-19]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[IT tools]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Network Monitoring]]></category>
		<category><![CDATA[Software-Market]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=12982</guid>

					<description><![CDATA[A practical overview of the network monitoring tools landscape, covering leading platforms such as Riverbed, Zenoss, and Nagios, key market segments, and the criteria DevOps and network engineers should use when evaluating solutions.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Editor&#8217;s note: The original post on this page was a lightly reworded press release from a market-research vendor (HTF Market Intelligence). Rather than reproduce unverifiable revenue forecasts, we have written an independent technical overview of the network monitoring tools landscape that is genuinely useful for DevOps and infrastructure engineers.</em></p>



<h2 class="wp-block-heading">What Are Network Monitoring Tools?</h2>



<p class="wp-block-paragraph">Network monitoring tools continuously observe the health, performance, and availability of network infrastructure—routers, switches, firewalls, load balancers, servers, and the links between them. They collect metrics such as latency, packet loss, bandwidth utilization, and interface errors, then surface alerts when values breach defined thresholds. For DevOps teams, these tools are a foundational layer of observability alongside application performance monitoring (APM) and log management.</p>



<h2 class="wp-block-heading">Notable Platforms in the Space</h2>



<p class="wp-block-paragraph">The following tools are widely referenced in enterprise and open-source contexts. This is not an exhaustive list, and capabilities change with each release—always verify current feature sets against vendor documentation.</p>



<h3 class="wp-block-heading">Nagios</h3>



<p class="wp-block-paragraph">Nagios is one of the oldest open-source network and infrastructure monitoring platforms. Its plugin architecture allows engineers to monitor virtually any service or device. <strong>Nagios Core</strong> is free and self-hosted; <strong>Nagios XI</strong> is a commercial product that adds a web UI, reporting, and configuration wizards. Nagios is widely used in Linux-centric environments and has a large community plugin library.</p>



<h3 class="wp-block-heading">Zenoss</h3>



<p class="wp-block-paragraph">Zenoss is an IT monitoring platform with roots in open source (Zenoss Core) and a commercial offering (Zenoss Cloud). It uses a model-driven architecture that automatically discovers and maps network topology. Zenoss is often chosen by enterprises that need unified monitoring across on-premises infrastructure and cloud workloads.</p>



<h3 class="wp-block-heading">Riverbed</h3>



<p class="wp-block-paragraph">Riverbed is better known for WAN optimization but also offers network performance management through its <strong>Riverbed NetProfiler</strong> and <strong>AppResponse</strong> products. These focus on flow-based analysis and packet-level visibility, making them particularly relevant for diagnosing application performance over wide-area networks.</p>



<h3 class="wp-block-heading">Zoho Network Monitor (ManageEngine)</h3>



<p class="wp-block-paragraph">Zoho&#8217;s IT management arm, ManageEngine, offers <strong>OpManager</strong> for network monitoring. It covers SNMP-based device monitoring, flow analysis, and configuration management, and targets both SMEs and larger enterprises with tiered licensing.</p>



<h3 class="wp-block-heading">Other Widely Used Alternatives</h3>



<ul class="wp-block-list">
<li><strong>PRTG Network Monitor (Paessler)</strong> – sensor-based model with an out-of-the-box web UI, popular with SMEs.</li>
<li><strong>Zabbix</strong> – open-source, agent and agentless, strong SNMP and IPMI support.</li>
<li><strong>Datadog Network Performance Monitoring</strong> – SaaS, integrates tightly with cloud-native stacks.</li>
<li><strong>SolarWinds NPM</strong> – enterprise-grade, strong auto-discovery and topology mapping.</li>
<li><strong>Grafana + Prometheus</strong> – popular open-source stack for metrics collection and visualization, often combined with SNMP exporters for network devices.</li>
</ul>



<h2 class="wp-block-heading">Key Market Segments</h2>



<p class="wp-block-paragraph">When evaluating or comparing solutions, the market is typically segmented along two axes:</p>



<h3 class="wp-block-heading">By Organization Size</h3>



<ul class="wp-block-list">
<li><strong>Small and Medium Enterprises (SMEs)</strong> – typically prioritize ease of deployment, low total cost of ownership, and SaaS delivery to avoid managing monitoring infrastructure.</li>
<li><strong>Large Enterprises</strong> – often require on-premises or hybrid deployment, fine-grained role-based access, compliance reporting, and the ability to monitor tens of thousands of devices at scale.</li>
</ul>



<h3 class="wp-block-heading">By Deployment Model</h3>



<ul class="wp-block-list">
<li><strong>On-premises / self-hosted</strong> – full control, required for air-gapped or highly regulated environments.</li>
<li><strong>SaaS / cloud-hosted</strong> – lower operational overhead, faster time to value, suits distributed teams.</li>
<li><strong>Hybrid</strong> – collector agents run on-premises, data is aggregated in the cloud.</li>
</ul>



<h2 class="wp-block-heading">Core Capabilities to Evaluate</h2>



<p class="wp-block-paragraph">When assessing any network monitoring tool, measure it against the following capabilities:</p>



<figure class="wp-block-table"><table><thead><tr><th>Capability</th><th>Why It Matters</th></tr></thead><tbody><tr><td>Auto-discovery</td><td>Automatically maps devices and dependencies, reducing manual inventory work.</td></tr><tr><td>SNMP &amp; flow support (NetFlow, sFlow, IPFIX)</td><td>Standard protocols for polling device metrics and capturing traffic-flow data.</td></tr><tr><td>Alerting &amp; escalation</td><td>Flexible thresholds, deduplication, and on-call routing prevent alert fatigue.</td></tr><tr><td>Topology visualization</td><td>Network maps help engineers understand blast radius during incidents.</td></tr><tr><td>Historical reporting</td><td>Trend analysis supports capacity planning and SLA reporting.</td></tr><tr><td>API &amp; integrations</td><td>Enables ChatOps, ticketing (Jira, ServiceNow), and ITSM workflows.</td></tr><tr><td>Scalability</td><td>Distributed pollers or cloud-native architectures handle large device counts.</td></tr><tr><td>Cloud &amp; hybrid visibility</td><td>Modern networks span AWS, Azure, GCP, and on-prem; the tool must follow.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Open Source vs. Commercial: A Practical Comparison</h2>



<h3 class="wp-block-heading">Open Source (e.g., Nagios Core, Zabbix, Grafana/Prometheus)</h3>



<ul class="wp-block-list">
<li>No license cost, but engineering time is required for setup, maintenance, and scaling.</li>
<li>Large community plugin ecosystems.</li>
<li>Best suited to teams with strong Linux and scripting skills.</li>
<li>Total cost of ownership can exceed commercial options at scale when staff time is factored in.</li>
</ul>



<h3 class="wp-block-heading">Commercial (e.g., Zenoss Cloud, PRTG, Datadog, SolarWinds)</h3>



<ul class="wp-block-list">
<li>Support contracts and SLAs reduce operational risk.</li>
<li>Richer out-of-the-box dashboards, reporting, and integrations.</li>
<li>License costs can be significant at high device counts—model pricing carefully.</li>
<li>Vendor lock-in is a real consideration for long-term architecture decisions.</li>
</ul>



<h2 class="wp-block-heading">Trends Shaping Network Monitoring</h2>



<ul class="wp-block-list">
<li><strong>AIOps and anomaly detection</strong> – machine-learning baselines replace static thresholds for dynamic cloud environments.</li>
<li><strong>Observability convergence</strong> – vendors are merging metrics, traces, and logs into unified platforms (e.g., Datadog, Dynatrace, New Relic).</li>
<li><strong>Cloud-native networking</strong> – Kubernetes networking (CNI plugins, service meshes like Istio) requires new monitoring approaches beyond traditional SNMP polling.</li>
<li><strong>eBPF-based monitoring</strong> – tools like Cilium and Hubble use eBPF to provide deep kernel-level network visibility without agents.</li>
<li><strong>Network as Code</strong> – monitoring configurations are increasingly version-controlled and deployed via CI/CD pipelines alongside infrastructure.</li>
</ul>



<h2 class="wp-block-heading">Choosing the Right Tool for Your Environment</h2>



<p class="wp-block-paragraph">There is no single best network monitoring tool. Selection should be driven by:</p>



<ol class="wp-block-list">
<li><strong>Scale</strong> – how many devices and interfaces need to be monitored?</li>
<li><strong>Team skill set</strong> – can you maintain an open-source stack, or do you need vendor support?</li>
<li><strong>Environment type</strong> – on-premises data center, cloud-native, or hybrid?</li>
<li><strong>Compliance requirements</strong> – does data sovereignty or audit logging constrain deployment options?</li>
<li><strong>Existing toolchain</strong> – which alerting, ticketing, and incident management tools do you already use?</li>
<li><strong>Budget</strong> – model both license costs and the engineering hours required to operate the platform.</li>
</ol>



<p class="wp-block-paragraph">Running a proof-of-concept in a staging environment against your actual device inventory is the most reliable way to surface gaps before committing to a platform.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/network-monitoring-tools-market-may-set-new-growth-story-riverbed-zenoss-nagios-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Automating Cacti Network Monitoring Deployment with Ansible</title>
		<link>https://www.bestdevops.com/devops-using-ansible-to-deploy-cacti-for-network-monitoring/</link>
					<comments>https://www.bestdevops.com/devops-using-ansible-to-deploy-cacti-for-network-monitoring/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Sat, 03 Jun 2017 06:39:59 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[DevOps Best Practices]]></category>
		<category><![CDATA[Ansible]]></category>
		<category><![CDATA[BestDevOps]]></category>
		<category><![CDATA[CACTI]]></category>
		<category><![CDATA[Network Monitoring]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=1731</guid>

					<description><![CDATA[Learn how to use Ansible playbooks to automate the full deployment of Cacti network monitoring on CentOS, including Apache, MySQL, PHP, RRDtool, SNMP, and Ansible Vault for credential management.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Source: <a href="https://opensourceforu.com" rel="noopener">opensourceforu.com</a></em></p>



<h2 class="wp-block-heading">What Is Cacti?</h2>



<p class="wp-block-paragraph">Cacti is an open-source network monitoring and graphing tool written in PHP, released under the GNU General Public License. It uses MySQL as its backend database and relies on <a href="https://oss.oetiker.ch/rrdtool/" rel="noopener">RRDtool</a> (Round-Robin Database tool) to store and render time-series performance data. Cacti has built-in SNMP support, making it well-suited for polling network devices such as routers, switches, and servers.</p>



<p class="wp-block-paragraph">Deploying Cacti manually involves installing and configuring several interdependent components. This article walks through automating the entire process with Ansible, reducing a multi-step manual procedure to a single playbook invocation.</p>



<h2 class="wp-block-heading">Environment Overview</h2>



<p class="wp-block-paragraph">The walkthrough uses the following environment:</p>



<ul class="wp-block-list">
<li><strong>Target host:</strong> CentOS 6.8 virtual machine running on KVM</li>
<li><strong>Control node:</strong> Parabola GNU/Linux-libre x86_64 running Ansible 2.2.1.0</li>
<li><strong>Guest VM IP:</strong> 192.168.122.98</li>
</ul>




<p class="wp-block-paragraph"><strong>Security note:</strong> SELinux is disabled in this demonstration to simplify the walkthrough. Set <code>SELINUX=disabled</code> in <code>/etc/selinux/config</code> and reboot the VM only for testing purposes. Always enable and properly configure SELinux in production environments.</p>




<h2 class="wp-block-heading">Inventory and Directory Structure</h2>



<p class="wp-block-paragraph">The Ansible project uses the following layout:</p>


<pre class="wp-block-code"><span><code class="hljs">ansible/inventory/kvm/inventory
ansible/inventory/kvm/group_vars/all/all.yml</code></span></pre>


<p class="wp-block-paragraph">The inventory file defines the target CentOS VM:</p>


<pre class="wp-block-code"><span><code class="hljs">centos ansible_host=192.168.122.98 ansible_connection=ssh ansible_user=root ansible_password=password</code></span></pre>


<p class="wp-block-paragraph">Add a corresponding entry to the control node&#8217;s <code>/etc/hosts</code>:</p>


<pre class="wp-block-code"><span><code class="hljs language-css">192<span class="hljs-selector-class">.168</span><span class="hljs-selector-class">.122</span><span class="hljs-selector-class">.98</span> <span class="hljs-selector-tag">centos</span></code></span></pre>


<p class="wp-block-paragraph">The <code>all.yml</code> group variables file references sensitive values from an Ansible Vault file rather than storing them in plain text:</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">---
mysql_cacti_password_hash: <span class="hljs-string">"{{ vault_mysql_cacti_password_hash }}"</span>

<span class="hljs-attr">mysql_username</span>: <span class="hljs-string">"{{ vault_mysql_user }}"</span>
<span class="hljs-attr">mysql_password</span>: <span class="hljs-string">"{{ vault_mysql_password }}"</span></code></span></pre>


<p class="wp-block-paragraph">The main playbook file <code>cacti.yml</code> lives under <code>ansible/playbooks/configuration/</code>.</p>



<h2 class="wp-block-heading">Managing Secrets with Ansible Vault</h2>



<p class="wp-block-paragraph">Ansible Vault encrypts sensitive files so that credentials are never stored in plain text. Set your preferred editor before creating a vault file:</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$ <span class="hljs-keyword">export</span> EDITOR=nano</code></span></pre>


<p class="wp-block-paragraph">Create the vault file to hold MySQL credentials:</p>


<pre class="wp-block-code"><span><code class="hljs">$ ansible-vault create inventory/kvm/group_vars/all/vault.yml</code></span></pre>


<p class="wp-block-paragraph">Ansible will prompt for an encryption password, then open your editor. Enter the credentials and save the file:</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">---
vault_mysql_cacti_password_hash: <span class="hljs-string">"*528573A4E6FE4F3E8B455F2F060EB6F63ECBECAA"</span>

<span class="hljs-attr">vault_mysql_user</span>: <span class="hljs-string">"cacti"</span>
<span class="hljs-attr">vault_mysql_password</span>: <span class="hljs-string">"cacti123"</span></code></span></pre>


<p class="wp-block-paragraph">To edit the vault file later, use:</p>


<pre class="wp-block-code"><span><code class="hljs">$ ansible-vault edit inventory/kvm/group_vars/all/vault.yml</code></span></pre>


<p class="wp-block-paragraph">Ansible will prompt for the vault password before decrypting the file for editing.</p>




<p class="wp-block-paragraph"><strong>Important:</strong> The password shown above (<code>cacti123</code>) is a placeholder for demonstration only. Use strong, unique credentials in any real deployment.</p>




<h2 class="wp-block-heading">Play 1: Install Apache HTTP Server</h2>



<p class="wp-block-paragraph">The first play installs the Apache web server. It updates the package cache, installs <code>httpd</code> and supporting utilities, starts the service, and waits until port 80 is accepting connections before continuing.</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">---
- name: Install web server
  <span class="hljs-attr">hosts</span>: centos
  <span class="hljs-attr">gather_facts</span>: <span class="hljs-literal">true</span>
  <span class="hljs-attr">tags</span>: &#91;httpd]

  <span class="hljs-attr">tasks</span>:
    - name: Update the software package repository
      <span class="hljs-attr">yum</span>:
        name: <span class="hljs-string">'*'</span>
        <span class="hljs-attr">update_cache</span>: yes

    - name: Install HTTP packages
      <span class="hljs-attr">package</span>:
        name: <span class="hljs-string">"{{ item }}"</span>
        <span class="hljs-attr">state</span>: latest
      <span class="hljs-attr">with_items</span>:
        - wget
        - nano
        - httpd
        - httpd-devel

    - name: Start the httpd server
      <span class="hljs-attr">service</span>:
        name: httpd
        <span class="hljs-attr">state</span>: started

    - wait_for:
        port: <span class="hljs-number">80</span></code></span></pre>


<h2 class="wp-block-heading">Play 2: Install MySQL, PHP, RRDtool, and SNMP</h2>



<p class="wp-block-paragraph">The second play installs Cacti&#8217;s core dependencies: MySQL, a full set of PHP extensions, RRDtool, and the SNMP utilities. After installation, both the SNMP daemon and the MySQL server are started, and the play waits for MySQL to become available on port 3306.</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">- name: Install MySQL, PHP packages
  <span class="hljs-attr">hosts</span>: centos
  <span class="hljs-attr">become</span>: yes
  <span class="hljs-attr">become_method</span>: sudo
  <span class="hljs-attr">gather_facts</span>: <span class="hljs-literal">true</span>
  <span class="hljs-attr">tags</span>: &#91;database-web]

  <span class="hljs-attr">tasks</span>:
    - name: Install database/web packages
      <span class="hljs-attr">package</span>:
        name: <span class="hljs-string">"{{ item }}"</span>
        <span class="hljs-attr">state</span>: latest
      <span class="hljs-attr">with_items</span>:
        - mysql
        - mysql-server
        - MySQL-python
        - php-mysql
        - php-pear
        - php-common
        - php-gd
        - php-devel
        - php
        - php-mbstring
        - php-cli
        - php-process
        - php-snmp
        - net-snmp-utils
        - net-snmp-libs
        - rrdtool

    - name: Start snmpd server
      <span class="hljs-attr">service</span>:
        name: snmpd
        <span class="hljs-attr">state</span>: started

    - name: Start mysqld server
      <span class="hljs-attr">service</span>:
        name: mysqld
        <span class="hljs-attr">state</span>: started

    - wait_for:
        port: <span class="hljs-number">3306</span></code></span></pre>

<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://i1.wp.com/opensourceforu.com/wp-content/uploads/2017/05/Figure4.jpg?resize=590%2C518" alt="Figure 4: Binary location and version" /><figcaption>Figure 4: Binary location and version</figcaption></figure>
</div>


<h2 class="wp-block-heading">Play 3: Install Cacti from EPEL</h2>



<p class="wp-block-paragraph">Cacti is available in the EPEL (Extra Packages for Enterprise Linux) repository, which is not enabled on CentOS by default. This play imports the EPEL GPG key, adds the EPEL repository, updates the package cache, installs Cacti, and creates a dedicated MySQL database user for the application.</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">- name: Install Cacti
  <span class="hljs-attr">hosts</span>: centos
  <span class="hljs-attr">become</span>: yes
  <span class="hljs-attr">become_method</span>: sudo
  <span class="hljs-attr">gather_facts</span>: <span class="hljs-literal">true</span>
  <span class="hljs-attr">tags</span>: &#91;cacti]

  <span class="hljs-attr">tasks</span>:
    - name: Import EPEL GPG key
      <span class="hljs-attr">rpm_key</span>:
        key: http:<span class="hljs-comment">//dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6</span>
        state: present

    - name: Add YUM repo
      <span class="hljs-attr">yum_repository</span>:
        name: epel
        <span class="hljs-attr">description</span>: EPEL YUM repo
        <span class="hljs-attr">baseurl</span>: https:<span class="hljs-comment">//dl.fedoraproject.org/pub/epel/$releasever/$basearch/</span>
        gpgcheck: yes

    - name: Update the software package repository
      <span class="hljs-attr">yum</span>:
        name: <span class="hljs-string">'*'</span>
        <span class="hljs-attr">update_cache</span>: yes

    - name: Install cacti
      <span class="hljs-attr">package</span>:
        name: <span class="hljs-string">"{{ item }}"</span>
        <span class="hljs-attr">state</span>: latest
      <span class="hljs-attr">with_items</span>:
        - cacti

    - name: Create cacti database user
      <span class="hljs-attr">mysql_user</span>:
        name: cacti
        <span class="hljs-attr">password</span>: <span class="hljs-string">"{{ mysql_cacti_password_hash }}"</span>
        <span class="hljs-attr">encrypted</span>: yes
        <span class="hljs-attr">priv</span>: <span class="hljs-string">'*.*:ALL,GRANT'</span>
        <span class="hljs-attr">state</span>: present</code></span></pre>


<h2 class="wp-block-heading">Play 4: Apply MySQL Timezone Bug Fix</h2>



<p class="wp-block-paragraph">MySQL 5.1.73-8 (the version shipped with CentOS 6) lacks timezone data in its system tables, which causes Cacti to report an error. To resolve this, the <code>mysql_test_data_timezone.sql</code> file must be imported into the <code>mysql</code> database, and the <code>cacti</code> user must be granted SELECT access to the <code>time_zone_name</code> table.</p>



<p class="wp-block-paragraph">This fix is tracked in the Cacti project as <a href="https://github.com/Cacti/cacti/issues/242" rel="noopener">issue #242</a>. Isolating it in its own play (or separate playbook) makes it easy to skip once you upgrade to a MySQL version where the bug no longer applies.</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">- name: For bug https:<span class="hljs-comment">//github.com/Cacti/cacti/issues/242</span>
  hosts: centos
  <span class="hljs-attr">become</span>: yes
  <span class="hljs-attr">become_method</span>: sudo
  <span class="hljs-attr">gather_facts</span>: <span class="hljs-literal">true</span>
  <span class="hljs-attr">tags</span>: &#91;bug]

  <span class="hljs-attr">tasks</span>:
    - name: Import mysql_test_data_timezone.sql
      <span class="hljs-attr">mysql_db</span>:
        state: <span class="hljs-keyword">import</span>
        <span class="hljs-attr">name</span>: mysql
        <span class="hljs-attr">target</span>: <span class="hljs-regexp">/usr/</span>share/mysql/mysql_test_data_timezone.sql

    - name: Grant privileges
      <span class="hljs-attr">mysql_user</span>:
        name: cacti
        <span class="hljs-attr">append_privs</span>: <span class="hljs-literal">true</span>
        <span class="hljs-attr">priv</span>: <span class="hljs-string">'mysql.time_zone_name:SELECT'</span>
        <span class="hljs-attr">state</span>: present</code></span></pre>


<h2 class="wp-block-heading">Play 5: Configure Cacti</h2>



<p class="wp-block-paragraph">The final play ties everything together:</p>



<ul class="wp-block-list">
<li>Creates the <code>cacti</code> database and imports the Cacti schema (<code>cacti.sql</code>)</li>
<li>Updates database credentials in <code>/etc/cacti/db.php</code> using the <code>lineinfile</code> module</li>
<li>Opens port 80 in iptables</li>
<li>Updates <code>/etc/httpd/conf.d/cacti.conf</code> to allow access from all hosts (adjust this for production)</li>
<li>Enables the Cacti cron poller by uncommenting its entry in <code>/etc/cron.d/cacti</code></li>
<li>Restarts both MySQL and Apache, then waits for each to become available</li>
</ul>


<pre class="wp-block-code"><span><code class="hljs language-javascript">- name: Configuration
  <span class="hljs-attr">hosts</span>: centos
  <span class="hljs-attr">become</span>: yes
  <span class="hljs-attr">become_method</span>: sudo
  <span class="hljs-attr">gather_facts</span>: <span class="hljs-literal">true</span>
  <span class="hljs-attr">tags</span>: &#91;config]

  <span class="hljs-attr">tasks</span>:
    - name: Create a database <span class="hljs-keyword">for</span> cacti
      <span class="hljs-attr">mysql_db</span>:
        name: cacti
        <span class="hljs-attr">state</span>: present

    - name: Import cacti.sql
      <span class="hljs-attr">mysql_db</span>:
        state: <span class="hljs-keyword">import</span>
        <span class="hljs-attr">name</span>: cacti
        <span class="hljs-attr">target</span>: <span class="hljs-regexp">/usr/</span>share/doc/cacti<span class="hljs-number">-1.0</span><span class="hljs-number">.4</span>/cacti.sql

    - name: Update database credentials <span class="hljs-keyword">in</span> config file
      <span class="hljs-attr">lineinfile</span>:
        dest: <span class="hljs-regexp">/etc/</span>cacti/db.php
        <span class="hljs-attr">regexp</span>: <span class="hljs-string">"{{ item.regexp }}"</span>
        <span class="hljs-attr">line</span>: <span class="hljs-string">"{{ item.line }}"</span>
      <span class="hljs-attr">with_items</span>:
        - { <span class="hljs-attr">regexp</span>: <span class="hljs-string">'^\$database_username'</span>, <span class="hljs-attr">line</span>: <span class="hljs-string">"$database_username = '{{ mysql_username }}';"</span> }
        - { <span class="hljs-attr">regexp</span>: <span class="hljs-string">'^\$database_password'</span>, <span class="hljs-attr">line</span>: <span class="hljs-string">"$database_password = '{{ mysql_password }}';"</span> }

    - name: Allow port <span class="hljs-number">80</span>
      <span class="hljs-attr">shell</span>: iptables -I INPUT <span class="hljs-number">5</span> -p tcp --dport <span class="hljs-number">80</span> -m state --state NEW,ESTABLISHED -j ACCEPT

    - name: Update access <span class="hljs-keyword">in</span> cacti.conf <span class="hljs-keyword">for</span> httpd
      <span class="hljs-attr">replace</span>:
        dest: <span class="hljs-regexp">/etc/</span>httpd/conf.d/cacti.conf
        <span class="hljs-attr">regexp</span>: <span class="hljs-string">"{{ item.regexp }}"</span>
        <span class="hljs-attr">replace</span>: <span class="hljs-string">"{{ item.replace }}"</span>
      <span class="hljs-attr">with_items</span>:
        - { <span class="hljs-attr">regexp</span>: <span class="hljs-string">'Require host localhost'</span>, <span class="hljs-attr">replace</span>: <span class="hljs-string">'Require all granted'</span> }
        - { <span class="hljs-attr">regexp</span>: <span class="hljs-string">'Allow from localhost'</span>, <span class="hljs-attr">replace</span>: <span class="hljs-string">'Allow from all'</span> }

    - lineinfile:
        dest: <span class="hljs-regexp">/etc/</span>cron.d/cacti
        <span class="hljs-attr">regexp</span>: <span class="hljs-string">'^#(.*)$'</span>
        <span class="hljs-attr">line</span>: <span class="hljs-string">'\1'</span>
        <span class="hljs-attr">backrefs</span>: yes

    - name: Restart mysqld server
      <span class="hljs-attr">service</span>:
        name: mysqld
        <span class="hljs-attr">state</span>: restarted

    - wait_for:
        port: <span class="hljs-number">3306</span>

    - name: Restart the httpd server
      <span class="hljs-attr">service</span>:
        name: httpd
        <span class="hljs-attr">state</span>: restarted

    - wait_for:
        port: <span class="hljs-number">80</span></code></span></pre>


<p class="wp-block-paragraph">The Cacti cron poller runs every five minutes to collect device metrics:</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">*<span class="hljs-regexp">/5 * * * * cacti /u</span>sr/bin/php /usr/share/cacti/poller.php &gt; <span class="hljs-regexp">/dev/</span><span class="hljs-literal">null</span> <span class="hljs-number">2</span>&gt;&amp;<span class="hljs-number">1</span></code></span></pre>

<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://i0.wp.com/opensourceforu.com/wp-content/uploads/2017/05/Figure9.jpg?resize=590%2C311" alt="Figure 9: Cacti Web UI" /><figcaption>Figure 9: Cacti Web UI after a successful deployment</figcaption></figure>
</div>


<h2 class="wp-block-heading">Running the Full Playbook</h2>



<p class="wp-block-paragraph">Once all plays are defined in <code>cacti.yml</code>, run the complete deployment with a single command. The <code>--ask-vault-pass</code> flag prompts for the Ansible Vault password so that encrypted credentials can be decrypted at runtime:</p>


<pre class="wp-block-code"><span><code class="hljs">$ ansible-playbook -i inventory/kvm/inventory playbooks/configuration/cacti.yml --ask-vault-pass</code></span></pre>


<p class="wp-block-paragraph">After the playbook completes successfully, navigate to <code>http://&lt;VM_IP&gt;/cacti</code> in a browser to run the Cacti web installer. The default login credentials are <code>admin</code> / <code>admin</code>; you will be prompted to change the password immediately after first login.</p>



<h2 class="wp-block-heading">Key Takeaways</h2>



<ul class="wp-block-list">
<li><strong>Ansible Vault</strong> keeps database credentials out of source control while still making them available to playbooks at runtime.</li>
<li><strong>Tagging plays</strong> (<code>httpd</code>, <code>database-web</code>, <code>cacti</code>, <code>bug</code>, <code>config</code>) allows you to re-run or skip individual stages during troubleshooting or upgrades.</li>
<li><strong>Isolating bug-fix plays</strong> makes it easy to remove them when you upgrade to a version of MySQL or Cacti where the fix is no longer needed.</li>
<li><strong>The <code>wait_for</code> module</strong> prevents subsequent tasks from executing before a service is actually ready to accept connections, making the playbook more reliable than simple service start tasks alone.</li>
<li>For production use, replace the broad <code>Require all granted</code> / <code>Allow from all</code> Apache directives with IP-restricted access controls, re-enable SELinux, and use firewalld or a dedicated firewall role instead of raw <code>iptables</code> shell commands.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/devops-using-ansible-to-deploy-cacti-for-network-monitoring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>10 Steps to Success with Distributed Network Monitoring</title>
		<link>https://www.bestdevops.com/10-steps-to-success-with-your-distributed-network-monitoring/</link>
					<comments>https://www.bestdevops.com/10-steps-to-success-with-your-distributed-network-monitoring/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Fri, 21 Apr 2017 13:09:50 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[DevOps Tools]]></category>
		<category><![CDATA[IT trends]]></category>
		<category><![CDATA[Autodiscovery tools]]></category>
		<category><![CDATA[BestDevOps]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Network Monitoring]]></category>
		<category><![CDATA[Steps]]></category>
		<category><![CDATA[Success]]></category>
		<category><![CDATA[visualization tools]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=1352</guid>

					<description><![CDATA[Distributed network monitoring in mission-critical environments is complex and error-prone. These ten practical steps cover setup, templating, SNMP, agentless monitoring, alerting, visualization, service desk integration, and SLA reporting to help you deploy and operate a reliable monitoring system.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Setting up distributed network monitoring in mission-critical production environments is a complex undertaking. Configuration mistakes are costly, and maintaining consistency across hundreds or thousands of nodes is a real operational challenge. The following ten steps address the most common pain points—from initial discovery through SLA reporting—drawing on practices supported by monitoring platforms such as <a href="https://www.opsview.com" rel="noopener">Opsview</a>.</p>



<h2 class="wp-block-heading">1. Fast, Easy Setup and Configuration</h2>



<p class="wp-block-paragraph">The biggest barrier to distributed monitoring is the sheer volume of initial configuration work. Autodiscovery tooling addresses this directly: you specify an IP address or CIDR range, and the monitoring system scans the network, identifies devices, and imports them with sensible defaults. This eliminates the need to hand-enter host definitions one by one.</p>



<p class="wp-block-paragraph">Beyond discovery, a well-designed configuration UI should let you make all changes in a single interface—no context-switching between screens or separate tools. For teams that prefer automation, a public REST API enables programmatic control: scripting bulk host imports, updating server profiles, or triggering configuration reloads as part of a CI/CD pipeline.</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.opsview.com/sites/default/files/images/blog/autodiscovery-6.png" alt="Autodiscovery IP scan showing imported network devices" /><figcaption>Autodiscovery IP scan — devices detected and imported automatically</figcaption></figure>



<h2 class="wp-block-heading">2. Maintain Consistency with Host Templates</h2>



<p class="wp-block-paragraph">In large distributed environments, configuration drift is a persistent problem. Host templates solve this by defining a standard set of service checks, thresholds, and notification rules for a given device class—say, all Cisco routers, all MySQL servers, or all Linux hosts running Apache.</p>



<p class="wp-block-paragraph">When you need to change a monitoring parameter across an entire device class, you update the template once and the change propagates to every host inheriting it. This controlled, centralized approach reduces the risk of inconsistent monitoring coverage and makes auditing your configuration straightforward.</p>



<h2 class="wp-block-heading">3. Reduce Errors with Cloning</h2>



<p class="wp-block-paragraph">Even with templates, there are situations where you need many near-identical host objects—for example, a rack of identical network switches that differ only in IP address and hostname. Manually entering each one is tedious and introduces transcription errors.</p>



<p class="wp-block-paragraph">A clone function lets you duplicate an existing, correctly configured host object as many times as needed, then adjust only the fields that differ (typically the IP and display name). This saves time and keeps configuration consistent across identical infrastructure.</p>



<h2 class="wp-block-heading">4. Speed Up Configuration with SNMP</h2>



<p class="wp-block-paragraph">SNMP (Simple Network Management Protocol) is the lingua franca of network device monitoring. A monitoring platform with embedded SNMP polling and trap handling can automatically detect SNMP interfaces on imported devices, eliminating the need to manually map OIDs or configure trap receivers.</p>



<p class="wp-block-paragraph">This matters for distributed monitoring because SNMP configuration mistakes—wrong community strings, incorrect OID mappings, missed trap destinations—are a leading cause of monitoring gaps. Automating SNMP interface detection removes a significant source of human error during setup.</p>



<h2 class="wp-block-heading">5. Manage Complexity with Attributes</h2>



<p class="wp-block-paragraph">As environments scale, the number of individual service checks grows rapidly. Attributes (sometimes called custom variables or macros in other monitoring systems) allow you to define a single parameterized service check and apply it across many targets.</p>



<p class="wp-block-paragraph">A practical example: a VMware host running 20–30 guest VMs. Instead of creating a separate service check for each guest, you define one check that accepts a VM name as an attribute, then list all guests as attribute values on the host object. The monitoring system generates individual checks automatically. This pattern dramatically reduces configuration volume and makes adding or removing VMs a matter of updating a list rather than creating or deleting check objects.</p>



<h2 class="wp-block-heading">6. Go Agentless Where Appropriate</h2>



<p class="wp-block-paragraph">Agent-based monitoring offers deep visibility but requires installing and maintaining agent software on every monitored system. In distributed environments—especially where you monitor third-party network equipment, embedded devices, or systems where you cannot install software—agentless monitoring is essential.</p>



<p class="wp-block-paragraph">Agentless protocols to consider:</p>



<ul class="wp-block-list">
<li><strong>SNMP</strong> — Industry-standard protocol for network devices, servers, and appliances. Suitable for availability checks, interface counters, and hardware health.</li>
<li><strong>WMI (Windows Management Instrumentation)</strong> — Native Windows management interface. Allows monitoring of CPU, memory, disk, services, and process state without installing an agent on Windows hosts.</li>
<li><strong>SSH-based checks</strong> — For Linux/Unix hosts where firewall policy or security requirements prohibit agent installation, remote checks over SSH are a common alternative.</li>
<li><strong>ICMP / synthetic transactions</strong> — Useful for basic availability and end-to-end transaction monitoring.</li>
</ul>



<p class="wp-block-paragraph">Agentless monitoring reduces deployment time significantly when onboarding new infrastructure, and removes the operational burden of keeping agents updated. The trade-off is that agentless checks may be less granular and more network-intensive than agent-based collection.</p>



<h2 class="wp-block-heading">7. Get the Right Notifications to the Right People</h2>



<p class="wp-block-paragraph">Alert fatigue is one of the most common reasons monitoring deployments fail in practice. Effective notification design means routing the right alert to the right person through the right channel at the right time—and nothing more.</p>



<p class="wp-block-paragraph">Best practices for distributed monitoring notifications:</p>



<ul class="wp-block-list">
<li><strong>Severity-based routing</strong> — Warning states might trigger email during business hours; critical states (service outages, host down) trigger SMS or phone escalation at any hour.</li>
<li><strong>Role-based targeting</strong> — Network engineers receive network alerts; application teams receive application alerts. Avoid broadcasting all alerts to all staff.</li>
<li><strong>Time-of-day scheduling</strong> — Align notifications with on-call rotations. Suppressing non-critical alerts outside business hours reduces noise without losing visibility into genuine outages.</li>
<li><strong>Escalation paths</strong> — If the primary contact does not acknowledge within a defined window, automatically escalate to a secondary or manager.</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="http://www.opsview.com/sites/default/files/images/pageimages/opsview-notifications3.png" alt="Notification profile configuration showing severity and contact routing" /><figcaption>Notification profile configuration — controlling who gets alerted, when, and how</figcaption></figure>



<h2 class="wp-block-heading">8. Visualize the Performance of Your Infrastructure</h2>



<p class="wp-block-paragraph">Raw status tables are hard to act on quickly during an incident. Topology maps, network diagrams, and business process maps give operators an at-a-glance view of which systems are healthy and which are degraded—and critically, how failures in one system propagate to dependent systems.</p>



<p class="wp-block-paragraph">Effective visualization capabilities for distributed monitoring include:</p>



<ul class="wp-block-list">
<li><strong>Network maps</strong> — Show device-to-device relationships and link status. Immediately reveals where a connectivity failure is occurring.</li>
<li><strong>Process/application maps</strong> — Model multi-tier applications so operators can see whether a degraded front-end is caused by an application server, database, or network issue.</li>
<li><strong>Custom infrastructure maps</strong> — Upload a data center floor plan or logical architecture diagram and overlay live status indicators. Useful for communicating infrastructure health to non-technical stakeholders.</li>
<li><strong>Host group tree views</strong> — Hierarchical summary views that roll up status from individual hosts to groups (e.g., by data center, by business unit, by environment).</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://www.opsview.com/sites/default/files/images/blog/ProcessMapCloseUp.png" alt="Business process map showing application component status overlaid on a service diagram" /><figcaption>Business process map — real-time status overlaid on a service dependency diagram</figcaption></figure>



<h2 class="wp-block-heading">9. Integrate with Your Service Desk</h2>



<p class="wp-block-paragraph">One of the biggest time sinks in operations is the manual process of spotting an alert, deciding it warrants a ticket, opening the service desk tool, filling in the details, and assigning it to the right team. At scale, this overhead is significant and error-prone.</p>



<p class="wp-block-paragraph">Monitoring platforms that integrate directly with service desk tools—such as Jira Service Management, ServiceNow, or Request Tracker—can automatically create, categorize, and assign tickets when defined thresholds are breached. When the underlying issue resolves, the ticket can be automatically updated or closed.</p>



<p class="wp-block-paragraph">This bi-directional integration delivers several benefits:</p>



<ul class="wp-block-list">
<li>Engineers spend time resolving problems, not filing tickets.</li>
<li>Every incident has an associated ticket with a full timeline, reducing post-incident investigation time.</li>
<li>SLA clocks in the service desk start automatically when the monitoring system detects a problem, not when someone manually notices and files a ticket.</li>
</ul>



<h2 class="wp-block-heading">10. Report Against SLAs</h2>



<p class="wp-block-paragraph">Distributed monitoring data is only valuable if it can be turned into actionable reports for internal teams and external stakeholders. SLA, availability, and performance reports allow you to answer the questions that matter to the business: Was the agreed uptime delivered? Which services degraded last quarter? Where should capacity be added?</p>



<p class="wp-block-paragraph">Useful reporting capabilities for distributed monitoring environments include:</p>



<ul class="wp-block-list">
<li><strong>Availability reports</strong> — Historical uptime percentages for specific hosts, services, or application tiers over configurable time windows.</li>
<li><strong>SLA reports</strong> — Compare actual availability against contractual commitments. Particularly important for managed service providers billing against service levels.</li>
<li><strong>Performance trend reports</strong> — Long-term trending of metrics such as CPU utilization, response times, and interface throughput. Essential for capacity planning.</li>
<li><strong>Scheduled delivery</strong> — Reports generated and emailed automatically on a defined schedule (daily, weekly, monthly), reducing manual effort and ensuring stakeholders receive consistent, timely data.</li>
</ul>



<p class="wp-block-paragraph">Well-designed reporting closes the loop between operational monitoring and business accountability, and provides the evidence base for infrastructure investment decisions.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Successful distributed network monitoring depends on reducing manual configuration work, maintaining consistency at scale, routing the right information to the right people, and turning raw monitoring data into business-relevant reports. The ten steps above—autodiscovery, templating, cloning, SNMP automation, attribute-based checks, agentless monitoring, smart notifications, visualization, service desk integration, and SLA reporting—collectively address the most common failure modes in distributed monitoring deployments. Applied together, they give operations teams the coverage and context they need to keep complex infrastructure reliable.</p>



<p class="wp-block-paragraph"><em>Original source: <a href="https://www.opsview.com" rel="noopener">opsview.com</a></em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/10-steps-to-success-with-your-distributed-network-monitoring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
