Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
elastic-apm-http-client
Advanced tools
A low-level HTTP client for communicating with the Elastic APM intake API
A low-level HTTP client for communicating with the Elastic APM intake API version 2. For support for version 1, use version 5.x of this module.
This module is meant for building other modules that needs to communicate with Elastic APM.
If you are looking to use Elastic APM in your app or website, you'd most likely want to check out the official Elastic APM agent for Node.js instead.
npm install elastic-apm-http-client --save
const Client = require('elastic-apm-http-client')
const client = new Client({
serviceName: 'My App',
agentName: 'my-nodejs-agent',
agentVersion: require('./package.json').version,
userAgent: 'My Custom Elastic APM Agent'
})
const span = {
name: 'SELECT FROM users',
duration: 42,
start: 0,
type: 'db.mysql.query'
}
client.sendSpan(span)
new Client(options)
Construct a new client
object. Data given to the client will be
converted to ndjson, compressed using gzip, and streamed to the APM
Server.
Arguments:
options
- An object containing config options (see below)Data sent to the APM Server as part of the metadata package:
agentName
- (required) The APM agent nameagentVersion
- (required) The APM agent versionserviceName
- (required) The name of the service being instrumentedserviceVersion
- The version of the service being instrumentedframeworkName
- If the service being instrumented is running a
specific framework, use this config option to log its nameframeworkVersion
- If the service being instrumented is running a
specific framework, use this config option to log its versionhostname
- Custom hostname (default: OS hostname)containerId
- Docker container id, if not given will be parsed from /proc/self/cgroup
kubernetesNodeName
- Kubernetes node namekubernetesNamespace
- Kubernetes namespacekubernetesPodName
- Kubernetes pod name, if not given will be the hostnamekubernetesPodUID
- Kubernetes pod id, if not given will be parsed from /proc/self/cgroup
HTTP client configuration:
userAgent
- (required) The HTTP user agent that your module should
identify it self assecretToken
- The Elastic APM intake API secret tokenserverUrl
- The APM Server URL (default: http://localhost:8200
)headers
- An object containing extra HTTP headers that should be
used when making HTTP requests to he APM ServerrejectUnauthorized
- Set to false
if the client shouldn't verify
the APM Server TLS certificates (default: true
)serverTimeout
- HTTP request timeout in milliseconds. If no data is
sent or received on the socket for this amount of time, the request
will be aborted. It's not recommended to set a serverTimeout
lower
than the time
config option. That might result in healthy requests
being aborted prematurely (default: 15000
ms)keepAlive
- If set the false
the client will not reuse sockets
between requests (default: true
)keepAliveMsecs
- When using the keepAlive
option, specifies the
initial delay for TCP Keep-Alive packets. Ignored when the keepAlive
option is false
or undefined
(default: 1000
ms)maxSockets
- Maximum number of sockets to allow per host (default:
Infinity
)maxFreeSockets
- Maximum number of sockets to leave open in a free
state. Only relevant if keepAlive
is set to true
(default: 256
)Streaming configuration:
size
- The maxiumum compressed body size (in bytes) of each HTTP
request to the APM Server. An overshoot of up to the size of the
internal zlib buffer should be expected as the buffer is flushed after
this limit is reached. The default zlib buffer size is 16 kb (default:
768000
bytes)time
- The maxiumum number of milliseconds a streaming HTTP request
to the APM Server can be ongoing before it's ended. Set to -1
to
disable (default: 10000
ms)bufferWindowTime
- Objects written in quick succession are buffered
and grouped into larger clusters that can be processed as a whole.
This config option controls the maximum time that buffer can live
before it's flushed (counted in milliseconds). Set to -1
for no
buffering (default: 20
ms)bufferWindowSize
- Objects written in quick succession are buffered
and grouped into larger clusters that can be processed as a whole.
This config option controls the maximum size of that buffer (counted
in number of objects). Set to -1
for no max size (default: 50
objects)Data sanitizing configuration:
truncateKeywordsAt
- Maximum size in bytes for strings stored as
Elasticsearch keywords. Strings larger than this will be trucated
(default: 1024
bytes)truncateErrorMessagesAt
- The maximum size in bytes for error
messages. Messages above this length will be truncated. Set to -1
to
disable truncation. This applies to the following properties:
error.exception.message
and error.log.message
(default: 2048
bytes)truncateStringsAt
- The maximum size in bytes for strings.
String values above this length will be truncated (default: 1024
bytes)truncateQueriesAt
- The maximum size in bytes for database queries.
Queries above this length will be truncated (default: 10000
bytes)Debug options:
payloadLogFile
- Specify a file path to which a copy of all data
sent to the APM Server should be written. The data will be in ndjson
format and will be uncompressedclose
The close
event is emitted when the client and any of its underlying
resources have been closed. The event indicates that no more events will
be emitted, and no more data can be sent by the client.
error
Emitted if an error occurs. The listener callback is passed a single Error argument when called.
finish
The finish
event is emitted after the client.end()
method has been
called, and all data has been flushed to the underlying system.
request-error
Emitted if an error occurs while communicating with the APM Server. The listener callback is passed a single Error argument when called.
This means that the current request to the APM Server is terminated and that the data included in that request is lost.
If a non-2xx response was received from the APM Server, the status code
will be available on error.code
.
If the APM Serer responded with a structured error message, the error
object will have the following properties:
error.accepted
- An integer indicating how many events was accepted
as part of the failed request. If 100 events was sent to the APM
Server as part of the request, and the error reports only 98 as
accepted, it means that two events either wasn't received or couldn't
be processed for some reasonerror.errors
- An array of error messages. Each element in the array
is an object containing a message
property (String) and an optional
document
property (String). If the document
property is given it
will contain the failed event as it was received by the APM ServerIf the APM returned an errro body that could not be parsed by the
client, the raw body will be available on error.response
.
The client is not closed when the request-error
event is emitted.
client.sent
An integer indicating the number of events (spans, transactions, or errors) sent by the client. An event is considered sent when the HTTP request used to transmit it have ended.
client.config(options)
Update the configuration given to the Client
constructor. All
configuration options can be updated except:
serverUrl
(http
vs https
)size
time
keepAlive
keepAliveMsecs
maxSockets
maxFreeSockets
client.sendSpan(span[, callback])
Send a span to the APM Server.
Arguments:
span
- A span object that can be serialized to JSONcallback
- Callback is called when the span
have been flushed to
the underlying systemclient.sendTransaction(transaction[, callback])
Send a transaction to the APM Server.
Arguments:
transaction
- A transaction object that can be serialized to JSONcallback
- Callback is called when the transaction
have been
flushed to the underlying systemclient.sendError(error[, callback])
Send a error to the APM Server.
Arguments:
error
- A error object that can be serialized to JSONcallback
- Callback is called when the error
have been flushed to
the underlying systemclient.sendMetricSet(metricset[, callback])
Send a metricset to the APM Server.
Arguments:
error
- A error object that can be serialized to JSONcallback
- Callback is called when the metricset
have been flushed to
the underlying systemclient.flush([callback])
Flush the internal buffer and end the current HTTP request to the APM Server. If no HTTP request is in process nothing happens.
Arguments:
callback
- Callback is called when the internal buffer have been
flushed and the HTTP request ended. If no HTTP request is in progress
the callback is called in the next tick.client.end([callback])
Calling the client.end()
method signals that no more data will be sent
to the client
. If the internal buffer contains any data, this is
flushed before ending.
Arguments:
callback
- If provided, the optional callback
function is attached
as a listener for the 'finish' eventclient.destroy()
Destroy the client
. After this call, the client has ended and
subsequent calls to sendSpan()
, sendTransaction()
, sendError()
,
flush()
, or end()
will result in an error.
FAQs
A low-level HTTP client for communicating with the Elastic APM intake API
The npm package elastic-apm-http-client receives a total of 38,169 weekly downloads. As such, elastic-apm-http-client popularity was classified as popular.
We found that elastic-apm-http-client demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.