Categorygithub.com/ppussar/mongodb_exporter
modulepackage
1.0.18
Repository: https://github.com/ppussar/mongodb_exporter.git
Documentation: pkg.go.dev

# README

MongoDB Query Exporter

GoReport

Prometheus exporter for MongoDB queries. Extract metrics from mongoDB queries results.

Build and Run

Bash

make build
./bin/mongodb_exporter configuration.yaml

Docker

docker run -v /local/path/to/configuration.yaml:/configuration.yaml -e CONFIG=/configuration.yaml ppussar/mongodb_exporter

Run Demo Application

(Requires docker)

Start mongodb and application container.

make start-demo
curl localhost:9090/prometheus

Stop mongodb and application container.

make stop-demo

Configuration

The exporter is configured via yaml.

HTTP Endpoints

Prometheus

Prometheus scrapes its monitored applications regularly via a provided http endpoint. The configuration below opens a http endpoint on http://localhost:9090/prometheus

Liveliness

Liveliness-Endpoint returns http status code 204 - [No Content] as soon as the exporter is started. An HTTP error status code indicates that the application is in bad condition and should be restarted.
The configuration below opens a http endpoint on http://localhost:9090/live

Health

Health-Endpoint returns http status code 200 as soon as the exporter is ready to serve user request. An HTTP error status code indicates that the application is currently not able to collect db metrics. The configuration below opens a http endpoint on http://localhost:9090/health

http:
  port: 9090
  path: /prometheus
  health: '/health'
  liveliness: '/live'

`https is currently not supported.

Mongo-DB connection

MongoDB connection-string

mongodb:
  uri: mongodb://localhost:27017

Metric Queries

metrics:
  - name: my.metric.name
    db: mydb
    collection: mycollection
    tags:
      myTag: "abc"
      bla: "blub"
    aggregation: "{$group: { _id: '$version', count: { $sum: 1 }}}"
    metricsAttribute: count
    tagAttributes:
      version: "_id"
  - name: another.metric.name
    ...
keydescriptionexamplereference
nameMetric namemy.metric.namehttps://micrometer.io/docs/concepts#_naming_meters
helpMetric help value on prometheus scrape pageYet another metric
dbMongoDB DB instance, which should be used.myDB
collectionMongoDB collection, which becomes queried.myCollection
tagsMap of static tags. Will be added to all resulting metrics.tagKey: tagValue
aggregationMongoDB aggregation query.{$group: { _id: '$version', count: { $sum: 1 }}}https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/
findMongoDB find query.{}https://docs.mongodb.com/manual/reference/method/db.collection.find/
metricsAttributeAttribute of the query result, which will be taken as gauge value.metricsAttribute: resultFieldName
tagAttributesMap of attributes of the query result, which will be taken as additional tags.tagKey: resultFieldName

Example Configuration

Given Collection 'fruits'

[
  { "_id": "apples", "qty": 5, "deliverer" : "Fruit Express"},
  { "_id": "bananas", "qty": 7, "deliverer" : "Bananas Daily" },
  { "_id": "oranges", "qty": 12, "deliverer" : "Fruit Express"},
  { "_id": "avocados", "qty": 14, "deliverer" : "Fruit Marked" }
]

Configuration with adapted prometheus endpoint port

version: 1.0
http:
  port: 9090
  path: /prometheus
mongodb:
  uri: mongodb://localhost:27017
metrics:
  - name: fruitstore_stock
    help: "Shows the current stock"
    db: fruitstore
    collection: fruits
    tags:
      provider: mongodb_exporter
    find: "{}"
    metricsAttribute: qty
    tagAttributes:
      type: _id
  - name: fruitstore_total
    db: fruitstore
    collection: fruits
    tags:
      provider: mongodb_exporter
    aggregate: '[{"$group": { "_id": "$deliverer", "pieces": {"$sum": "$qty"}}}]'
    metricsAttribute: pieces
    tagAttributes:
      type: _id

scrape

curl http://localhost:9090/prometheus

Output

# HELP Shows the current stock
# TYPE fruitstore_stock gauge
fruitstore_stock{provider="mongodb_exporter",type="avocados",} 14.0
fruitstore_stock{provider="mongodb_exporter",type="oranges",} 12.0
fruitstore_stock{provider="mongodb_exporter",type="apples",} 5.0
fruitstore_stock{provider="mongodb_exporter",type="bananas",} 7.0
# HELP fruitstore_total
# TYPE fruitstore_total gauge
fruitstore_total{provider="mongodb_exporter",type="Fruit Express",} 17.0
fruitstore_total{provider="mongodb_exporter",type="Bananas Daily",} 7.0
fruitstore_total{provider="mongodb_exporter",type="Fruit Marked",} 14.0

# Functions

NewExporter creates a new Exporter defined by the given config.

# Structs

An Exporter queries a mongodb to gather metrics and provide those on a prometheus http endpoint.