新增learn-kubernetes(https://github.com/yyong-brs/learn-kubernetes)相关文件
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
FROM node:16.13.1-alpine3.14 AS builder
|
||||
|
||||
WORKDIR /src
|
||||
COPY src/package.json .
|
||||
RUN npm install
|
||||
|
||||
# app
|
||||
FROM node:16.13.1-alpine3.14
|
||||
|
||||
EXPOSE 80
|
||||
ENV PORT=80
|
||||
CMD ["node", "server.js"]
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=builder /src/node_modules/ /app/node_modules/
|
||||
COPY src/ .
|
||||
@@ -0,0 +1,14 @@
|
||||
const { format, transports } = require('winston');
|
||||
var logConfig = module.exports = {};
|
||||
|
||||
logConfig.options = {
|
||||
format: format.combine(
|
||||
format.splat(),
|
||||
format.simple()
|
||||
),
|
||||
transports: [
|
||||
new transports.Console({
|
||||
level: 'info'
|
||||
})
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
const winston = require('winston');
|
||||
var logConfig = require('./config/logConfig');
|
||||
|
||||
const logger = winston.createLogger(logConfig.options);
|
||||
exports.Logger = logger;
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "access-log",
|
||||
"version": "1.0.0",
|
||||
"main": "server.js",
|
||||
"author": "kiamol",
|
||||
"dependencies": {
|
||||
"restify": "8.5.1",
|
||||
"winston": "3.3.3",
|
||||
"prom-client": "12.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
const restify = require("restify");
|
||||
const prom = require("prom-client");
|
||||
const log = require("./log");
|
||||
const os = require("os");
|
||||
|
||||
const accessCounter = new prom.Counter({
|
||||
name: "access_log_total",
|
||||
help: "Access Log - total log requests"
|
||||
});
|
||||
|
||||
const clientIpGauge = new prom.Gauge({
|
||||
name: "access_client_ip_current",
|
||||
help: "Access Log - current unique IP addresses"
|
||||
});
|
||||
|
||||
//setup Prometheus with standard metrics:
|
||||
prom.collectDefaultMetrics();
|
||||
|
||||
function stats(req, res, next) {
|
||||
log.Logger.debug("** GET /stats called");
|
||||
var data = {
|
||||
logs: logCount
|
||||
};
|
||||
res.send(data);
|
||||
next();
|
||||
}
|
||||
|
||||
function respond(req, res, next) {
|
||||
log.Logger.debug("** POST /access-log called");
|
||||
log.Logger.info("Access log, client IP: %s", req.body.clientIp);
|
||||
logCount++;
|
||||
|
||||
//metrics:
|
||||
accessCounter.inc();
|
||||
ipAddresses.push(req.body.clientIp);
|
||||
let uniqueIps = Array.from(new Set(ipAddresses));
|
||||
clientIpGauge.set(uniqueIps.length);
|
||||
|
||||
res.send(201, "Created");
|
||||
next();
|
||||
}
|
||||
|
||||
var logCount = 0;
|
||||
var ipAddresses = new Array();
|
||||
var server = restify.createServer();
|
||||
server.use(restify.plugins.bodyParser());
|
||||
server.get("/stats", stats);
|
||||
server.post("/access-log", respond);
|
||||
|
||||
server.get("/metrics", function(req, res, next) {
|
||||
res.end(prom.register.metrics());
|
||||
});
|
||||
|
||||
server.headersTimeout = 20;
|
||||
server.keepAliveTimeout = 10;
|
||||
server.listen(process.env.PORT, function() {
|
||||
log.Logger.info("%s listening at %s", server.name, server.url);
|
||||
});
|
||||
Reference in New Issue
Block a user