PROGRAMMER ARE THE NEW ROCK STARS
"Code is expensive to change, but design is cheaper to change, and requirements are even cheaper to change." - Daniel T. Barr
DO NOT UNDERESTIMATE THE POWER OF A PROGRAMMER.
"We who cut mere stones must always be envisioning cathedrals." - Quarry worker's creed
- GitHub Actions
- SonarCloud
- Synk
- Aspecto
- Confluent Cloud Span, Logs & Metrics
- Apache Kafka Local
- AWS MSK
- Code Coverage
- GitHub Codespace
- Jetbrains Webstorm
- Jetbrains Spaces
- Capella Full Text Search
- Capella Vector Search
- Caching (redis)
"use strict";
//OpenTelemetry
const { Resource } = require("@opentelemetry/resources");
const {
SemanticResourceAttributes,
} = require("@opentelemetry/semantic-conventions");
const { SimpleSpanProcessor } = require("@opentelemetry/sdk-trace-base");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { trace } = require("@opentelemetry/api");
//exporter
const {
OTLPTraceExporter,
} = require("@opentelemetry/exporter-trace-otlp-http");
//instrumentations
const {
getNodeAutoInstrumentations,
} = require("@opentelemetry/auto-instrumentations-node");
const {
ExpressInstrumentation,
} = require("opentelemetry-instrumentation-express");
const {
MongoDBInstrumentation,
} = require("@opentelemetry/instrumentation-mongodb");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const {
KafkaJsInstrumentation,
} = require("opentelemetry-instrumentation-kafkajs");
module.exports = (serviceName) => {
const exporter = new OTLPTraceExporter({
url: "https://collector.aspecto.io/v1/traces",
headers: {
Authorization: process.env.ASPECTO_API_KEY,
},
});
const provider = new NodeTracerProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: serviceName,
}),
});
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();
registerInstrumentations({
instrumentations: [
getNodeAutoInstrumentations(),
new KafkaJsInstrumentation({}),
new ExpressInstrumentation({
requestHook: (span, requestInfo) => {
span.setAttribute(
"http.request.body",
JSON.stringify(requestInfo.req.body)
);
},
}),
new MongoDBInstrumentation(),
],
tracerProvider: provider,
});
return trace.getTracer(serviceName);
};
Always blue, always blue, always blue...