@azure/mcp-win32-x64
Version:
Azure MCP Server - Model Context Protocol implementation for Azure, for win32 on x64
170 lines (130 loc) • 4.29 kB
Markdown
# Basic Azure Monitor Setup for Express.js
This guide shows how to add Azure Monitor OpenTelemetry to an Express.js application.
## Prerequisites
- Node.js 14.x or higher
- npm or yarn
- Express.js application
- 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
useAzureMonitor({
azureMonitorExporterOptions: {
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING
}
});
// Now load your application code
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
// Your middleware and routes
app.use(express.json());
app.get('/', (req, res) => {
res.json({ message: 'Hello World!' });
});
app.get('/api/users', (req, res) => {
// This request will be automatically tracked
res.json([{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]);
});
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://...
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
```
## Step 4: Add Custom Telemetry (Optional)
```javascript
const { trace } = require('@opentelemetry/api');
app.get('/api/process', async (req, res) => {
const span = trace.getActiveSpan();
// Add custom attributes
span?.setAttribute('user.id', req.headers['user-id']);
span?.setAttribute('operation.type', 'data-processing');
try {
// Your business logic
const result = await processData();
res.json(result);
} catch (error) {
// Exceptions are automatically tracked
span?.recordException(error);
res.status(500).json({ error: 'Processing failed' });
}
});
```
## What Gets Tracked Automatically
✅ **HTTP Requests**: All incoming requests with duration, status, URL
✅ **Dependencies**: Outgoing HTTP calls, database queries
✅ **Exceptions**: Unhandled errors and exceptions
✅ **Performance**: Response times and request counts
✅ **Custom Logs**: `console.log()` statements are captured as traces
## Verify It Works
1. Start your application:
```bash
npm start
```
2. Make some HTTP requests:
```bash
curl http://localhost:3000/
curl http://localhost:3000/api/users
```
3. Check Azure Portal:
- Navigate to your Application Insights resource
- Go to "Transaction search" or "Live Metrics"
- You should see requests appearing within 1-2 minutes
## Complete package.json Example
```json
{
"name": "express-azure-monitor-demo",
"version": "1.0.0",
"description": "Express app with Azure Monitor",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
},
"dependencies": {
"@azure/monitor-opentelemetry": "^1.0.0",
"express": "^4.18.0",
"dotenv": "^16.0.0"
},
"devDependencies": {
"nodemon": "^3.0.0"
}
}
```
## Troubleshooting
**No telemetry appearing?**
- Verify connection string is correct
- Ensure `useAzureMonitor()` is called BEFORE loading Express
- Check console for error messages
- Wait 2-3 minutes for initial data to appear
**Performance impact?**
- Azure Monitor has minimal overhead (<5% in most cases)
- Use sampling for high-traffic applications
- Disable in development if needed
## Next Steps
- Configure custom dimensions and metrics
- Set up alerts and dashboards in Azure Portal
- Enable profiler for performance analysis
- Add distributed tracing across microservices