gelf-pro
- ไลบรารีไคลเอนต์ Graylog2 สำหรับ Node.js
ส่งบันทึกไปยังเซิร์ฟเวอร์ Graylog2 ในรูปแบบ GELF (Graylog Extended Log Format)
คุณสมบัติ:
"dependencies": {
"gelf-pro": "~1.3" // see the "releases" section
}
npm install gelf-pro
(รองรับเวอร์ชัน node.js ทั้งหมด [0.x ถึง 2x.x] :)
ไลบรารีขึ้นอยู่กับ: lodash#~4.17
var log = require ( 'gelf-pro' ) ;
คำเตือน
เพื่อให้แน่ใจว่าการทำงานจะสอดคล้องกัน ไม่มีอะแดปเตอร์ที่มีอยู่นำการเชื่อมต่อซ็อกเก็ตกลับมาใช้ใหม่ การใช้การเชื่อมต่อซ็อกเก็ตซ้ำอาจทำให้เกิดการรั่วไหลของทรัพยากร ความซับซ้อนในการจัดการสถานะ ปัญหาการทำงานพร้อมกัน ความเสี่ยงด้านความปลอดภัย และอาจไม่ได้ให้ประโยชน์ด้านประสิทธิภาพที่สำคัญเสมอไป มักจะง่ายกว่าและปลอดภัยกว่าในการสร้างการเชื่อมต่อใหม่ตามความจำเป็น แทนที่จะนำการเชื่อมต่อที่มีอยู่กลับมาใช้ใหม่ เพื่อให้มั่นใจว่ามีการใช้ทรัพยากรได้ดีขึ้น และลดภาวะแทรกซ้อนที่อาจเกิดขึ้นในการสื่อสารเครือข่าย
มีหลายรูปแบบ (1, 2) ให้คุณยืมและสร้างอะแดปเตอร์ใหม่ ดูส่วนที่เกี่ยวข้อง
GELF UDP
GELF TCP
(พร้อม Null frame delimiter
)GELF TCP
(พร้อม Null frame delimiter
และ Enable TLS
) บันทึก
ภายในเครือข่ายที่เสถียรไม่มากก็น้อย (ซึ่งเป็นไปได้มากที่สุด) ฉันขอแนะนำให้ใช้อะแดปเตอร์ udp
ฉันอยากจะแนะนำสำหรับโปรเจ็กต์ที่มีการโหลดปานกลางถึงสูง สำหรับข้อมูลที่ละเอียดอ่อน แนะนำให้ใช้อะแด็ปเตอร์ tcp-tls
// simple
log . setConfig ( { adapterOptions : { host : 'my.glog-server.net' } } ) ;
// advanced
log . setConfig ( {
fields : { facility : "example" , owner : "Tom (a cat)" } , // optional; default fields for all messages
filter : [ ] , // optional; filters to discard a message
transform : [ ] , // optional; transformers for a message
broadcast : [ ] , // optional; listeners of a message
levels : { } , // optional; default: see the levels section below
aliases : { } , // optional; default: see the aliases section below
adapterName : 'udp' , // optional; currently supported "udp", "tcp" and "tcp-tls"; default: udp
adapterOptions : { // this object is passed to the adapter.connect() method
// common
host : '127.0.0.1' , // optional; default: 127.0.0.1
port : 12201 , // optional; default: 12201
// ... and so on
// tcp adapter example
family : 4 , // tcp only; optional; version of IP stack; default: 4
timeout : 1000 , // tcp only; optional; default: 10000 (10 sec)
// udp adapter example
protocol : 'udp4' , // udp only; optional; udp adapter: udp4, udp6; default: udp4
// tcp-tls adapter example
key : fs . readFileSync ( 'client-key.pem' ) , // tcp-tls only; optional; only if using the client certificate authentication
cert : fs . readFileSync ( 'client-cert.pem' ) , // tcp-tls only; optional; only if using the client certificate authentication
ca : [ fs . readFileSync ( 'server-cert.pem' ) ] // tcp-tls only; optional; only for the self-signed certificate
}
} ) ;
log.setConfig
ผสานข้อมูล ดังนั้นคุณสามารถเรียกได้หลายครั้ง
var extra = { tom : 'cat' , jerry : 'mouse' , others : { spike : 1 , tyke : 1 } } ;
log . info ( "Hello world" , extra , function ( err , bytesSent ) { } ) ;
log . info ( "Hello world" , function ( err , bytesSent ) { } ) ;
log . info ( "Hello world" , extra ) ;
log . info ( "Hello world" ) ;
log . error ( 'Oooops.' , new Error ( 'An error message' ) ) ;
// ^-- extra becomes: {short_message: 'Oooops.', _error_message: 'An error message', _error_stack: Error's stack}
log . error ( new Error ( 'An error message' ) ) ;
// ^-- extra becomes: {short_message: 'An error message', full_message: Error's stack}
log . message ( new Error ( 'An error message' ) , 3 ) ; // same as previous
ในกรณี extra
เป็นวัตถุธรรมดา ไลบรารีจะแปลงเป็นรูปแบบที่อ่านได้ ค่าอื่นๆ จะถูกแปลงเป็นสตริง รูปแบบของคีย์ที่ยอมรับได้คือ: ^[w-]$
log . info (
'a new msg goes here' ,
{ me : { fname : 'k' , lname : 'k' , bdate : new Date ( 2000 , 01 , 01 ) } }
) ;
// ^-- extra becomes: {_me_fname: 'k', _me_lname: 'k', _me_bdate: 'Tue Feb 01 2000 00:00:00 GMT+0100 (CET)'}
บางครั้งเราก็ต้องทิ้งข้อความที่ไม่เหมาะกับสภาพแวดล้อมปัจจุบันไป NOT
สามารถแก้ไขข้อมูลได้
log . setConfig ( {
filter : [
function ( message ) { // rejects a "debug" message
return ( message . level < 7 ) ;
}
]
} ) ;
transforming
เกิดขึ้นหลังจาก filtering
สามารถปรับเปลี่ยนข้อมูลได้
log . setConfig ( {
transform : [
function ( message ) { // unwind an error
if ( _ . isError ( message . error ) ) {
message . error = { message : message . error . message , stack : message . error . stack } ;
}
return message ;
}
]
} ) ;
broadcasting
เกิดขึ้นหลัง transforming
NOT
สามารถแก้ไขข้อมูลได้
log . setConfig ( {
broadcast : [
function ( message ) { // broadcasting to console
console [ message . level > 3 ? 'log' : 'error' ] ( message . short_message , message ) ;
}
]
} ) ;
ค่าเริ่มต้น:
{emergency: 0, alert: 1, critical: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7}
ตัวอย่าง: log.emergency(...)
, log.critical(...)
ฯลฯ
ตัวอย่างที่กำหนดเอง: {alert: 0, notice: 1, ...}
คุณสามารถบังคับใช้อะแดปเตอร์แบบกำหนดเองได้โดยตั้งค่า adapter
ทันทีหลังจากเริ่มต้นใช้งาน ลายเซ็นอาจพบได้ที่นี่
var log = require ( 'gelf-pro' ) ;
var myFancyAdapter = require ( '...' ) ;
log . adapter = myFancyAdapter ;
// (!) adapterName and adapterOptions will be ignored
ค่าเริ่มต้น: {log: 'debug', warn: 'warning'}
ตัวอย่าง: log.log(...) -> log.debug(...)
, log.warn(...) -> log.warning(...)
ฯลฯ
ตัวอย่างที่กำหนดเอง: {red: 'alert', yellow: 'notice', ...}
npm install
npm test
[sudo] docker build --no-cache -t node-gelf-pro .
[sudo] docker run -ti --rm -v " ${PWD} :/opt/app " -w " /opt/app " node-gelf-pro
เอ็มไอที