Skip to content

Commit

Permalink
Add logging and metrics
Browse files Browse the repository at this point in the history
Signed-off-by: Romain Barissat <[email protected]>
  • Loading branch information
politician committed Oct 28, 2021
1 parent 8cae852 commit 72c1e22
Show file tree
Hide file tree
Showing 6 changed files with 798 additions and 28 deletions.
17 changes: 12 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,29 @@
"url": "https://github.com/olivr/app-nodejs.git"
},
"dependencies": {
"@opentelemetry/api": "^1.0.3",
"@opentelemetry/instrumentation-dns": "^0.26.0",
"@opentelemetry/instrumentation-express": "^0.26.0",
"@opentelemetry/instrumentation-http": "^0.26.0",
"@opentelemetry/instrumentation-net": "^0.26.0",
"@opentelemetry/instrumentation-pino": "^0.26.0",
"@opentelemetry/sdk-node": "^0.26.0",
"express": "^4.17.1",
"js-yaml": "^4.1.0"
"js-yaml": "^4.1.0",
"pino-http": "^5.8.0",
"prom-client": "^14.0.0"
},
"author": "Romain Barissat",
"license": "Apache-2.0",
"devDependencies": {
"nodemon": "^2.0.14"
"nodemon": "^2.0.14",
"pino-pretty": "^7.1.0"
},
"scripts": {
"dev": "yarn dev:local",

"dev:local": "yarn nodemon --inspect src/index.js",
"dev:docker": "yarn docker:cleanup & yarn docker:build:dev && yarn docker:start:dev",
"dev:k8s": "yarn k8s:start:dev",

"docker:build:dev": "docker build --target dev --build-arg node_env=development -t my-app .",
"docker:build:debug": "docker build --target debug -t my-app .",
"docker:build:prod": "docker build -t my-app .",
Expand All @@ -30,7 +38,6 @@
"docker:start:prod": "docker run -d -p 3001:3000 my-app",
"docker:cleanup": "docker rm $(docker stop $(docker ps -a -q --filter ancestor=my-app))",
"docker:logs": "docker logs $(docker ps -q --filter ancestor=my-app) -f",

"k8s:init": "ctlptl create cluster kind --registry=ctlptl-registry",
"k8s:destroy": "ctlptl delete cluster kind-kind",
"k8s:start:dev": "tilt up",
Expand Down
32 changes: 19 additions & 13 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
const { settings } = require("./settings");
const express = require("express");
const yaml = require("js-yaml");
const fs = require("fs");
const path = require("path");
const expressMeter = require("./observability/meter");
const { expressLogger, logger } = require("./observability/logger");

try {
const settings = yaml.load(
fs.readFileSync(path.join(__dirname, "config/settings.yaml"), "utf8")
);

const port = process.env.PORT || settings.general.defaultPort || 3000;

const app = express();
app.get("/", (req, res) =>
res.send(`Hello ${settings.general.welcomeName}!`)
);
app.listen(port, () => console.log(`App listening on port ${port}!`));

app.use(expressLogger);
app.use(expressMeter);

app.get("/", (req, res) => {
req.log.info("Visited homepage");
req.log.error("Example error");
req.log.debug("Example debug");
req.log.trace("Example trace");
res.send(`Hello ${settings.general.welcomeName}!`);
});

app.listen(port, () => {
logger.info(`App listening on port ${port}!`);
});
} catch (e) {
console.error(e);
logger.error(e);
}
6 changes: 6 additions & 0 deletions src/observability/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const expressLogger = require("pino-http")();

const logger = expressLogger.logger;
logger.level = process.env.LOG_LEVEL || "info";

module.exports = { expressLogger, logger };
18 changes: 18 additions & 0 deletions src/observability/meter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const express = require("express");
const prometheus = require("prom-client");

const register = new prometheus.Registry();
prometheus.collectDefaultMetrics({ register });

const router = express.Router();
router.get("/metrics", async (req, res) => {
try {
res.set("Content-Type", register.contentType);
res.end(await register.metrics());
} catch (e) {
req.log.error(e);
res.status(500).end(e);
}
});

module.exports = router;
13 changes: 13 additions & 0 deletions src/settings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const fs = require("fs");
const path = require("path");
const yaml = require("js-yaml");
const { logger } = require("./observability/logger");

try {
const settings = yaml.load(
fs.readFileSync(path.join(__dirname, "config/settings.yaml"), "utf8")
);
exports.settings = settings;
} catch (e) {
logger.error(e);
}
Loading

0 comments on commit 72c1e22

Please sign in to comment.