在Linux上使用Swagger进行API监控和日志记录,可以按照以下步骤进行:
首先,你需要在你的Linux系统上安装Swagger。Swagger是一个用于设计、构建、记录和使用RESTful Web服务的框架。
如果你已经安装了Node.js和npm,可以使用以下命令安装Swagger:
npm install -g swagger-jsdoc swagger-ui-express
如果你更喜欢使用Docker,可以运行以下命令来启动一个Swagger UI容器:
docker run -p 8080:8080 swaggerapi/swagger-ui-express
然后,你可以通过浏览器访问http://localhost:8080来查看Swagger UI。
在你的项目中配置Swagger,以便它可以生成API文档并记录API调用。
创建一个名为swagger.json的文件,并添加你的API定义。例如:
{
  "swagger": "2.0",
  "info": {
    "description": "Sample API",
    "version": "1.0.0"
  },
  "host": "api.example.com",
  "basePath": "/v1",
  "schemes": [
    "https"
  ],
  "paths": {
    "/users": {
      "get": {
        "summary": "List all users",
        "responses": {
          "200": {
            "description": "A list of users"
          }
        }
      }
    }
  }
}
如果你使用的是Express框架,可以这样集成Swagger:
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');
const app = express();
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
app.get('/users', (req, res) => {
  res.json([{ id: 1, name: 'John Doe' }]);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
为了记录API调用,你可以使用中间件来捕获请求和响应信息。
Morgan是一个流行的HTTP请求日志记录中间件。你可以使用它来记录每个请求的详细信息。
npm install morgan
然后在你的Express应用中使用它:
const morgan = require('morgan');
app.use(morgan('combined'));
你也可以编写自定义的日志记录中间件来记录更多的信息,例如请求时间、响应时间等。
app.use((req, res, next) => {
  const start = Date.now();
  res.on('finish', () => {
    const duration = Date.now() - start;
    console.log(`${req.method} ${req.url} - ${res.statusCode} ${duration}ms`);
  });
  next();
});
为了监控API的性能和健康状况,你可以使用一些工具,例如Prometheus和Grafana。
你可以使用Docker来安装Prometheus和Grafana:
docker run -d --name prometheus -p 9090:9090 prom/prometheus
docker run -d --name grafana -p 3000:3000 grafana/grafana
在你的Express应用中集成Prometheus客户端库:
npm install prom-client
然后,创建一个Prometheus指标收集器:
const client = require('prom-client');
const register = new client.Registry();
const httpRequestDurationMicroseconds = new client.Histogram({
  name: 'http_request_duration_ms',
  help: 'Duration of HTTP requests in ms',
  labelNames: ['method', 'route', 'code'],
  buckets: [0.10, 5, 15, 50, 100, 200, 300, 400, 500]
});
register.registerMetric(httpRequestDurationMicroseconds);
app.use((req, res, next) => {
  res.locals.startEpoch = Date.now();
  res.on('finish', () => {
    const responseTimeInMs = Date.now() - res.locals.startEpoch;
    httpRequestDurationMicroseconds
      .labels(req.method, req.route.path, res.statusCode)
      .observe(responseTimeInMs);
  });
  next();
});
最后,在Prometheus中配置抓取目标,并在Grafana中创建仪表盘来可视化这些指标。
通过以上步骤,你可以在Linux上使用Swagger进行API监控和日志记录。