在 Lambda 中使用 Xray SDK 通过 UDP 发送段
Use Xray sdk in Lambda to send segments over UDP
我正在使用 Lambda。我想使用自定义 end_time 向 Xray 发送子分段。我的 Lambda 中启用了 Xray。
当我使用 aws-xray-sdk-core
和 addNewSubsegment('postgres')
时,我找不到添加 end_time
的可能性。当您 close()
段时,似乎正在设置 end_time
。
为了尝试解决这个限制,我根据以下内容使用 UDP 将自定义段发送到 Xray 守护程序。
Use UDP to send segment to XRay
下面的代码没有向 Xray 发送 SubSegment。使用 client.send(...)
.
发送片段时我没有收到任何错误
有人知道更多关于设置自定义的限制吗end_time/知道是否可以在 Lambda 中使用 UDP?
import AWSXRay from 'aws-xray-sdk-core'
const traceDocument = {
trace_id,
id: generateRandomHex(16),
name: 'postgres',
start_time,
end_time,
type: 'subsegment',
parent_id,
sql: { sanitized_query: query },
}
const client = createSocket('udp4')
const udpSegment = `{"format": "json", "version": 1}\n${traceDocument}`
client.send(udpSegment, 2000, '127.0.0.1', (e, b) => {
console.log(e, b)
})
设法自己找到解决方案
结合使用 X-Ray SDK
addAttribute('in_progress', false)
和
streamSubsegments()
将子分段发送到 X-Ray
export const onQueryEvent = async (e) => {
try {
const segment = AWSXRay.getSegment()
if (segment) {
const paramsArr = JSON.parse(e.params)
const query = getQueryWithParams(e.query, paramsArr) // X-Ray wants the time in seconds -> ms * 1e-3
const start_time = e.timestamp.valueOf() * 1e-3
const end_time = (e.timestamp.valueOf() + e.duration) * 1e-3
// Add a new Subsegment to parent Segment
const subSegment = segment.addNewSubsegment('postgres') // Add data to the segment
subSegment.addSqlData({ sanitized_query: query })
subSegment.addAttribute('start_time', start_time)
subSegment.addAttribute('end_time', end_time) // Set in_progress to false so subSegment
// will be send to xray on streamSubsegments()
subSegment.addAttribute('in_progress', false)
subSegment.streamSubsegments()
}
} catch (e) {
console.log(e)
}
}
我正在使用 Lambda。我想使用自定义 end_time 向 Xray 发送子分段。我的 Lambda 中启用了 Xray。
当我使用 aws-xray-sdk-core
和 addNewSubsegment('postgres')
时,我找不到添加 end_time
的可能性。当您 close()
段时,似乎正在设置 end_time
。
为了尝试解决这个限制,我根据以下内容使用 UDP 将自定义段发送到 Xray 守护程序。 Use UDP to send segment to XRay
下面的代码没有向 Xray 发送 SubSegment。使用 client.send(...)
.
有人知道更多关于设置自定义的限制吗end_time/知道是否可以在 Lambda 中使用 UDP?
import AWSXRay from 'aws-xray-sdk-core'
const traceDocument = {
trace_id,
id: generateRandomHex(16),
name: 'postgres',
start_time,
end_time,
type: 'subsegment',
parent_id,
sql: { sanitized_query: query },
}
const client = createSocket('udp4')
const udpSegment = `{"format": "json", "version": 1}\n${traceDocument}`
client.send(udpSegment, 2000, '127.0.0.1', (e, b) => {
console.log(e, b)
})
设法自己找到解决方案
结合使用 X-Ray SDK
addAttribute('in_progress', false)
和
streamSubsegments()
将子分段发送到 X-Ray
export const onQueryEvent = async (e) => {
try {
const segment = AWSXRay.getSegment()
if (segment) {
const paramsArr = JSON.parse(e.params)
const query = getQueryWithParams(e.query, paramsArr) // X-Ray wants the time in seconds -> ms * 1e-3
const start_time = e.timestamp.valueOf() * 1e-3
const end_time = (e.timestamp.valueOf() + e.duration) * 1e-3
// Add a new Subsegment to parent Segment
const subSegment = segment.addNewSubsegment('postgres') // Add data to the segment
subSegment.addSqlData({ sanitized_query: query })
subSegment.addAttribute('start_time', start_time)
subSegment.addAttribute('end_time', end_time) // Set in_progress to false so subSegment
// will be send to xray on streamSubsegments()
subSegment.addAttribute('in_progress', false)
subSegment.streamSubsegments()
}
} catch (e) {
console.log(e)
}
}