@azure/mcp-win32-x64
Version:
Azure MCP Server - Model Context Protocol implementation for Azure, for win32 on x64
186 lines (136 loc) • 5.23 kB
Markdown
# Basic Azure Monitor Setup for Node.js with MongoDB
This guide shows how to add Azure Monitor OpenTelemetry to a Node.js application using MongoDB.
## Prerequisites
- Node.js 14.x or higher
- npm or yarn
- Node.js application with MongoDB (`mongodb` package)
- Azure Application Insights resource
## Step 1: Install Package
```bash
npm install @azure/monitor-opentelemetry
```
## Step 2: Initialize at Startup
Create or update your main entry point (typically `index.js` or `server.js`):
```javascript
// IMPORTANT: This must be the first line, before any other imports
const { useAzureMonitor } = require('@azure/monitor-opentelemetry');
// Initialize Azure Monitor - MongoDB operations will be automatically instrumented
useAzureMonitor({
azureMonitorExporterOptions: {
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING
}
});
// Now load your application code
const express = require('express');
const { MongoClient } = require('mongodb');
const app = express();
const port = process.env.PORT || 3000;
// MongoDB connection
const mongoUrl = process.env.MONGODB_URL || 'mongodb://localhost:27017';
const dbName = process.env.MONGODB_DB || 'mydb';
let db;
async function connectToDatabase() {
const client = new MongoClient(mongoUrl);
await client.connect();
db = client.db(dbName);
console.log('Connected to MongoDB');
}
app.use(express.json());
app.get('/api/users', async (req, res) => {
// This query will be automatically tracked as a dependency
const users = await db.collection('users').find({}).limit(10).toArray();
res.json(users);
});
connectToDatabase().then(() => {
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
});
```
## Step 3: Configure Connection String
Create a `.env` file in your project root:
```env
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://...
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB=mydb
PORT=3000
```
Install `dotenv` to load environment variables:
```bash
npm install dotenv
```
Load it at the very top of your entry file:
```javascript
require('dotenv').config();
const { useAzureMonitor } = require('@azure/monitor-opentelemetry');
// ... rest of code
```
## What Gets Instrumented Automatically
With Azure Monitor OpenTelemetry, the following MongoDB operations are automatically tracked:
- **Operations**: find, insert, update, delete, aggregate, etc.
- **Operation duration**: Time taken for each database operation
- **Collection name**: Which collection was accessed
- **Database name**: Which database was used
- **Success/failure**: Operation status
## Step 4: Add Custom Telemetry (Optional)
```javascript
const { trace } = require('@opentelemetry/api');
app.post('/api/users', async (req, res) => {
const tracer = trace.getTracer('my-app');
await tracer.startActiveSpan('create-user', async (span) => {
try {
span.setAttribute('user.email', req.body.email);
const result = await db.collection('users').insertOne({
name: req.body.name,
email: req.body.email,
createdAt: new Date()
});
span.setAttribute('user.id', result.insertedId.toString());
res.status(201).json({ _id: result.insertedId, ...req.body });
} catch (error) {
span.recordException(error);
span.setStatus({ code: 2, message: error.message });
res.status(500).json({ error: 'Database error' });
} finally {
span.end();
}
});
});
```
## Using with Mongoose
If you're using Mongoose ODM, the setup is the same:
```javascript
require('dotenv').config();
const { useAzureMonitor } = require('@azure/monitor-opentelemetry');
useAzureMonitor({
azureMonitorExporterOptions: {
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING
}
});
const mongoose = require('mongoose');
const express = require('express');
// Mongoose operations will automatically be instrumented
mongoose.connect(process.env.MONGODB_URL);
const UserSchema = new mongoose.Schema({
name: String,
email: String
});
const User = mongoose.model('User', UserSchema);
const app = express();
app.get('/api/users', async (req, res) => {
const users = await User.find().limit(10);
res.json(users);
});
```
## Viewing Telemetry in Azure Portal
1. Open your Application Insights resource in Azure Portal
2. Navigate to "Application Map" to see MongoDB as a dependency
3. Use "Transaction search" to find specific database operations
4. Check "Dependencies" under "Investigate" to see operation performance
## Troubleshooting
### MongoDB operations not appearing
1. Ensure `useAzureMonitor()` is called **before** importing `mongodb` or `mongoose`
2. Verify the connection string is set correctly
3. Check that operations are being executed (not just connections)
### High cardinality in telemetry
MongoDB instrumentation captures collection names. For applications with dynamic collections, consider using a consistent naming pattern.