<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: lalitpercona</title>
    <description>The latest articles on DEV Community by lalitpercona (@lalitpercona).</description>
    <link>https://dev.to/lalitpercona</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F377314%2Fd42434ea-6134-411c-be4b-6eac9879cf28.png</url>
      <title>DEV Community: lalitpercona</title>
      <link>https://dev.to/lalitpercona</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lalitpercona"/>
    <language>en</language>
    <item>
      <title>Percona MongoDB Exporter for MongoDB Monitoring with SSL/TLS</title>
      <dc:creator>lalitpercona</dc:creator>
      <pubDate>Fri, 01 May 2020 08:41:40 +0000</pubDate>
      <link>https://dev.to/lalitpercona/percona-mongodb-exporter-for-mongodb-monitoring-with-ssl-tls-47cn</link>
      <guid>https://dev.to/lalitpercona/percona-mongodb-exporter-for-mongodb-monitoring-with-ssl-tls-47cn</guid>
      <description>&lt;p&gt;Percona provides the &lt;a href="https://github.com/percona/mongodb_exporter"&gt;mongodb_exporter&lt;/a&gt; for monitoring MongoDB. It can feed a Prometheus time-series database by exporting sharding, replication, and storage engine metrics. So basically, it’s the way we monitor MongoDB through &lt;a href="https://www.percona.com/software/database-tools/percona-monitoring-and-management"&gt;Percona Monitoring and Management&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can download or build mongodb_exporter from the &lt;a href="https://github.com/percona/mongodb_exporter"&gt;Github repository&lt;/a&gt;. It also comes with the pmm-client package, and it’s based on the latest available mongodb_exporter version.&lt;/p&gt;

&lt;p&gt;A simple connection method to MongoDB from mongodb_exporter is described in the mongodb_exporter documentation. But the SSL/TLS connection is a bit tricky due to the option changes between versions of MongoDB and mongodb_exporter.&lt;br&gt;
Reference:&lt;br&gt;
&lt;a href="https://docs.mongodb.com/manual/reference/connection-string/#tls-options"&gt;https://docs.mongodb.com/manual/reference/connection-string/#tls-options&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/percona/mongodb_exporter/releases/tag/v0.10.0"&gt;https://github.com/percona/mongodb_exporter/releases/tag/v0.10.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This blog post will show how to configure MongoDB Exporter with SSL/TLS options.&lt;/p&gt;
&lt;h2&gt;
  
  
  Connection Method and Options
&lt;/h2&gt;
&lt;h3&gt;
  
  
  mongodb_exporter v 0.9.0
&lt;/h3&gt;

&lt;p&gt;For SSL connection mongodb_exporter and MongoDB, here’s a list of &lt;a href="https://www.percona.com/doc/percona-monitoring-and-management/section.exporter.mongodb.html"&gt;SSL options&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ./mongodb_exporter --mongodb.uri=mongodb://mongodb_exporter:Admin123@localhost:27017 --mongodb.tls --mongodb.tls-ca /etc/mongodb/rootCA.pem --mongodb.tls-cert /etc/mongodb/mongodb.pem&lt;/span&gt;
INFO[0000] Starting mongodb_exporter &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.9.0, &lt;span class="nv"&gt;branch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;v0.9.0, &lt;span class="nv"&gt;revision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;a11b3b515ee219ef9bce6af7f41d3ff47cc71720&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb_exporter.go:108"&lt;/span&gt;
INFO[0000] Build context &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;go&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;go1.12.9, &lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;travis@build.travis-ci.com, &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20190830-18:19:56&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb_exporter.go:109"&lt;/span&gt;
INFO[0000] Starting HTTP server &lt;span class="k"&gt;for &lt;/span&gt;http://:9216/metrics ... &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"server.go:140"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;MongoDB server logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;I ACCESS &lt;span class="o"&gt;[&lt;/span&gt;conn1164] Successfully authenticated as principal mongodb_exporter on admin from client 127.0.0.1:40772
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  mongodb_exporter v 0.10.0
&lt;/h3&gt;

&lt;p&gt;Now lets test SSL connection with mongodb_exporter v0.10.0 using the same options.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ./mongodb_exporter --mongodb.uri=mongodb://mongodb_exporter:Admin123@localhost:27017 --mongodb.tls --mongodb.tls-ca /etc/mongodb/rootCA.pem --mongodb.tls-cert /etc/mongodb/mongodb.pem&lt;/span&gt;
mongodb_exporter: error: unknown long flag &lt;span class="s1"&gt;'--mongodb.tls'&lt;/span&gt;, try &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As we can see, mongodb_exporter v0.10.0 is not able to identify given options in the document. An error occurred due to changes in the mongodb_exporter v.0.10.0 version.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://github.com/percona/mongodb_exporter/releases/tag/v0.10.0"&gt;https://github.com/percona/mongodb_exporter/releases/tag/v0.10.0&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-go.mongodb.org/mongo-driver was updated to v1.1.1.&lt;/li&gt;
&lt;li&gt;-All –mongodb.tls* flags were removed. Use tls-options instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the MongoDB version and the support for SSL/TSL, we will use the following options in mongodb.uri:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SSL Option&lt;/th&gt;
&lt;th&gt;TLS Option&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sslclientcertificatekeyfile&lt;/td&gt;
&lt;td&gt;tlscertificatekeyfile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sslclientcertificatekeypassword&lt;/td&gt;
&lt;td&gt;tlscertificatekeyfilepassword&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sslinsecure&lt;/td&gt;
&lt;td&gt;tlsinsecure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sslcertificateauthorityfile&lt;/td&gt;
&lt;td&gt;tlscafile&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We should refer to MongoDB documentation for &lt;a href="https://docs.mongodb.com/manual/reference/connection-string/#tls-options"&gt;additional URI options&lt;/a&gt;. We will not see these options under mongodb_exporter –help since they are part of mongodb.uri&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Using TLS Options
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ./mongodb_exporter --mongodb.uri="mongodb://mongodb_exporter:Admin123@localhost:27017/admin?tls=true&amp;amp;tlsCertificateKeyFile=/etc/mongodb/mongodb.pem&amp;amp;tlsAllowInvalidCertificates=true&amp;amp;tlsCAFile=/etc/mongodb/rootCA.pem"&lt;/span&gt;
INFO[0000] Starting mongodb_exporter &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.10.0, &lt;span class="nv"&gt;branch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;v0.10.0, &lt;span class="nv"&gt;revision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bf683745093a9210ebacbeb235bb792e21d17389&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb_exporter.go:94"&lt;/span&gt;
INFO[0000] Build context &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;go&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;go1.12.9, &lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;travis@build.travis-ci.com, &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20190918-13:37:48&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb_exporter.go:95"&lt;/span&gt;
INFO[0000] Starting HTTP server &lt;span class="k"&gt;for &lt;/span&gt;http://:9216/metrics ... &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"server.go:140"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;MongoDB logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;listener] connection accepted from 127.0.0.1:52146 &lt;span class="c"&gt;#1564 (1 connection now open)&lt;/span&gt;
I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;conn1564] received client metadata from 127.0.0.1:52146 conn1564: &lt;span class="o"&gt;{&lt;/span&gt; driver: &lt;span class="o"&gt;{&lt;/span&gt; name: &lt;span class="s2"&gt;"mongo-go-driver"&lt;/span&gt;, version: &lt;span class="s2"&gt;"v1.1.1"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, os: &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"linux"&lt;/span&gt;, architecture: &lt;span class="s2"&gt;"amd64"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, platform: &lt;span class="s2"&gt;"go1.12.9"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;listener] connection accepted from 127.0.0.1:52148 &lt;span class="c"&gt;#1565 (2 connections now open)&lt;/span&gt;
I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;conn1565] received client metadata from 127.0.0.1:52148 conn1565: &lt;span class="o"&gt;{&lt;/span&gt; driver: &lt;span class="o"&gt;{&lt;/span&gt; name: &lt;span class="s2"&gt;"mongo-go-driver"&lt;/span&gt;, version: &lt;span class="s2"&gt;"v1.1.1"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, os: &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"linux"&lt;/span&gt;, architecture: &lt;span class="s2"&gt;"amd64"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, platform: &lt;span class="s2"&gt;"go1.12.9"&lt;/span&gt;, application: &lt;span class="o"&gt;{&lt;/span&gt; name: &lt;span class="s2"&gt;"mongodb_exporter"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
I ACCESS &lt;span class="o"&gt;[&lt;/span&gt;conn1565] Successfully authenticated as principal mongodb_exporter on admin from client 127.0.0.1:52148
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Using SSL options
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;./mongodb_exporter &lt;span class="nt"&gt;--mongodb&lt;/span&gt;.uri&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb://mongodb_exporter:Admin123@localhost:27017/admin?ssl=true&amp;amp;sslclientcertificatekeyfile=/etc/mongodb/mongodb.pem&amp;amp;sslinsecure=true&amp;amp;sslcertificateauthorityfile=/etc/mongodb/rootCA.pem"&lt;/span&gt;
INFO[0000] Starting mongodb_exporter &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.10.0, &lt;span class="nv"&gt;branch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;v0.10.0, &lt;span class="nv"&gt;revision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bf683745093a9210ebacbeb235bb792e21d17389&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb_exporter.go:94"&lt;/span&gt;
INFO[0000] Build context &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;go&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;go1.12.9, &lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;travis@build.travis-ci.com, &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20190918-13:37:48&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mongodb_exporter.go:95"&lt;/span&gt;
INFO[0000] Starting HTTP server &lt;span class="k"&gt;for &lt;/span&gt;http://:9216/metrics ... &lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"server.go:140"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;MongoDB logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;listener] connection accepted from 127.0.0.1:51650 &lt;span class="c"&gt;#1544 (1 connection now open)&lt;/span&gt;
I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;conn1544] received client metadata from 127.0.0.1:51650 conn1544: &lt;span class="o"&gt;{&lt;/span&gt; driver: &lt;span class="o"&gt;{&lt;/span&gt; name: &lt;span class="s2"&gt;"mongo-go-driver"&lt;/span&gt;, version: &lt;span class="s2"&gt;"v1.1.1"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, os: &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"linux"&lt;/span&gt;, architecture: &lt;span class="s2"&gt;"amd64"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, platform: &lt;span class="s2"&gt;"go1.12.9"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;listener] connection accepted from 127.0.0.1:51652 &lt;span class="c"&gt;#1545 (2 connections now open)&lt;/span&gt;
I NETWORK &lt;span class="o"&gt;[&lt;/span&gt;conn1545] received client metadata from 127.0.0.1:51652 conn1545: &lt;span class="o"&gt;{&lt;/span&gt; driver: &lt;span class="o"&gt;{&lt;/span&gt; name: &lt;span class="s2"&gt;"mongo-go-driver"&lt;/span&gt;, version: &lt;span class="s2"&gt;"v1.1.1"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, os: &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"linux"&lt;/span&gt;, architecture: &lt;span class="s2"&gt;"amd64"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;, platform: &lt;span class="s2"&gt;"go1.12.9"&lt;/span&gt;, application: &lt;span class="o"&gt;{&lt;/span&gt; name: &lt;span class="s2"&gt;"mongodb_exporter"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
I ACCESS &lt;span class="o"&gt;[&lt;/span&gt;conn1545] Successfully authenticated as principal mongodb_exporter on admin from client 127.0.0.1:51652
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As I mentioned, while the SSL/TLS connection can be a little tricky, I am hopeful that this post helps you properly configure MongoDB Exporter!&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>monitoring</category>
      <category>database</category>
      <category>percona</category>
    </item>
  </channel>
</rss>
