簡體   English   中英

Prometheus 指標不適用於自定義 node.js 應用程序

[英]Prometheus metrics dont work on self defined node.js application

我正在學習一些教程,他們都以相同的方式進行操作,包括“prom-client”並創建一個新的 /metrics url。然后我訪問我的 http://localhost:4000/metrics 我得到以下錯誤而不是我的指標:

TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be of type string or an instance of Buffer or Uint8Array. Received an instance of Promise
    at new NodeError (node:internal/errors:372:5)
    at write_ (node:_http_outgoing:742:11)
    at ServerResponse.end (node:_http_outgoing:855:5)
    at /server.js:79:9
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:95:5)
    at next (/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:95:5)
    at /node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/node_modules/express/lib/router/index.js:341:12)

服務器.js:


//coniguration for server
const express= require('express');
const app= express();
const https= require('https');
const http = require('http');
const fs = require('fs');
const PORT=process.env.PORT || 4000


const client = require('prom-client')
const register = new client.Registry()

register.setDefaultLabels({
    app: 'chat-api'
})
client.collectDefaultMetrics({register})

const httpsRequestDuractionMicroseconds = new client.Histogram({
    name: 'httpsreq',
    help: 'httpsreqhelp',
    labelNames: ['method','route','code'],
    buckets: [0.1,0.3,0.5,1,3,4,5,7]


})

register.registerMetric(httpsRequestDuractionMicroseconds)

//server inizialisation
//var server= https.createServer(options,app)
var server=http.createServer(app)

const {Server} = require('socket.io');
const { response } = require('./routes/posts');

const io= new Server(server,{maxHttpBufferSize:10e7})





server.listen(PORT, ()=>{
    console.log('server is listening on port '+PORT)
})



//array for displaying users
var arrayUsers=[]


//app.get('/test', (req,res)=>{
  //  res.sendStatus(200);
//})

//app pages
app.use(express.static(__dirname + '/public'))

app.use(require('./routes/posts'));

app.get('/metrics',(req,res)=>{
    res.setHeader('Content-Type',register.contentType)
    res.end(register.metrics())
})

app.get('/',(req,res)=>{
    res.sendFile(__dirname + '/login_register/login.html')
})


app.get('/register',(req,res)=>{
    res.sendFile(__dirname + '/login_register/register.html')
})

app.get('/chatroom',(req,res)=>{
    res.sendFile(__dirname + '/index.html')
})



//on new socket connection
//socket event simple message and file message

io.on('connection',(socket)=>{
    console.log('new connection',socket.id)
    socket.on('message', (msg)=>{
        socket.broadcast.emit('message',msg)
    })
    socket.on('file-message', (msg)=>{
        socket.broadcast.emit('file-message',msg)
    })


    socket.on('user-connected', (userName_)=>{
        console.log(userName_ + " joined " +socket.id)

        //push username and socket.id into array to display users in chat client
        arrayUsers.push({
            socket_id: socket.id,
            userName_socket: userName_
        })

        console.log(arrayUsers)
        //client message for users that a new user joined
        socket.broadcast.emit('user-connected',userName_)
        
        //update online-users list
        socket.emit('online-users',arrayUsers)
        socket.broadcast.emit('online-users',arrayUsers)

    })

    

    socket.on('disconnect',()=>{
        
        //find socket.id of disconnected user to delete him from array
        let arrayMatch=arrayUsers.find(arrayMatch=>arrayMatch.socket_id===socket.id)
           
            
            let index = arrayUsers.findIndex(arrayMatch => {
                return arrayMatch.socket_id === socket.id;
              });

           console.log(index)


            //chat message to other clients that user disconnected
            
            try{

            
            socket.broadcast.emit('user_disconnected',arrayMatch.userName_socket)
        
            //splice disconnected user from array
            arrayUsers.splice(index,1)

            console.log(arrayUsers)

            //update online-userlist
            socket.broadcast.emit('online-users',arrayUsers)

          
            }catch{}

    })

})

在我的普羅米修斯儀表板中,它還顯示我的 server.js 應用程序也沒有連接,我不知道如何修復它

我這邊的 prom-client 模塊也有同樣的問題。 register.metrics()返回一個 Promise。我不是 Express 專家,我不知道在 res.end() 方法中使用 Promise 是否正確。 無論如何,我只是像這樣解決了 Promise 並以純文本形式返回了 Prometheus 指標:

app.get('/metrics', (req,res) => {
    res.setHeader('Content-Type',register.contentType)
    register.metrics().then(data => res.send(data));
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM