On GitHub, pinojs/pino-elasticsearch has picked up 193 stars, JavaScript. 🌲 load pino logs into Elasticsearch
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
pino-elasticsearch
To send pino logs to elasticsearch:
cat log | pino-elasticsearch --node http://localhost:9200
Flags
-h | --help Display Help
-v | --version display Version
-n | --node the URL where Elasticsearch is running
-i | --index the name of the index to use; default: pino
will replace %{DATE} with the YYYY-MM-DD date
-t | --type the name of the type to use; default: log
-f | --flush-bytes the number of bytes for each bulk insert; default: 1000
-t | --flush-interval time that the helper will wait before flushing; default: 30000
-l | --trace-level trace level for the elasticsearch client, default 'error' (info, debug, trace).
| --es-version specify the major version number of Elasticsearch (eg: 5, 6, 7)
(this is needed only if you are using Elasticsearch <= 7)
-u | --username Username to specify with authentication method
(can only be used in tandem with the 'password' flag)
-p | --password Password to specify with authentication method
(can only be used in tandem with the 'username' flag)
-k | --api-key Api key for authentication instead of username/password combination
-c | --cloud Id of the elastic cloud node to connect to
-r | --read-config the name of config file
--rejectUnauthorized Reject any connection which is not authorized with the list of supplied CAs; default: true
--opType the op_type to use (create, index)
"create" is required when using datastreams
Using multiple streams (output to Console and Elasticsearch)
If you want to output to multiple streams (transports and console), you can either use pino.transport or pino.multistream. Transport is recommended and can be used like:
Please note: The options must be serializable. For example if you use a function as index, you will get an error. Find an example at pino-pretty how you can use it.
Custom Connection
If you want to use a custom Connection class for the Elasticsearch client, you can pass it as an option when using as a module. See the Elasticsearch client docs for Connection.
Assuming your Elasticsearch instance is running and accessible, there are a couple of common problems that will cause indices or events (log entries) to not be created in Elasticsearch when using this library. Developers can get feedback on these problems by listening for events returned by the stream handler.
The stream handler returned from the default factory function is an EventEmitter. Developers can use this interface to debug issues encountered by the pino-elasticsearch library.
The bulk insert request to Elasticsearch failed (records dropped).
insert
(stats: Record<string, any>) => void
Called when an insert was successfully performed
error
(error: Error) => void
Called when the Elasticsearch client fails for some other reason
There are a few common problems developers will encounter when initially using this library. The next section discusses these issues.
Pino output is not JSON
Any transform of the stream (like pino-pretty) that results in an non-JSON stream output will be ignored (the unknown event will be emitted).
const pino = require('pino');
const pinoElastic = require('pino-elasticsearch');
const streamToElastic = pinoElastic({
index: 'an-index',
node: 'http://localhost:9200',
esVersion: 7,
flushBytes: 1000
})
streamToElastic.on(
'unknown',
(line, error) =>
console.log('Expect to see a lot of these with Pino Pretty turned on.')
);
const logger = pino({
prettyPrint: true,
}, streamToElastic)
Events do not match index schema/mappings
Elasticsearch schema mappings are strict and if events do not match their format, the events will be dropped. A typical example is if you use the default pino format with the logs- index in Elasticsearch. The default installation of Elasticsearch includes a data pipeline mapped to the logs- index prefix. This is intended to be used by the Beats and Logstash aggregators and requires @timestamp and @message fields. The default pino setup uses time and msg. Attempting to write events to the logs- index without mapping/transforming the pino schema will result in events being dropped.
Developers can troubleshoot insert errors by watching for the insertError event.
You can then use Kibana to
browse and visualize your logs. Note: This transport works only with Elasticsearch version ≥ 5.
Dynamic index
It is possible to customize the index name for every log line just providing a function to the index option:
const pino = require('pino')
const pinoElastic = require('pino-elasticsearch')
const streamToElastic = pinoElastic({
index: function (logTime) {
// the logTime is a ISO 8601 formatted string of the log line
return `awesome-app-${logTime.substring(5, 10)}`
},
node: 'http://localhost:9200'
})
// ...
The function must be sync, doesn't throw and return a string.
Datastreams
Indexing to datastreams requires the opType to be set to create:
Does pinojs/pino-elasticsearch have a project website?
No homepage URL was recorded for pinojs/pino-elasticsearch in TopGit's last sync. The README tab above frequently contains screenshots and demo links, or check the repository description on GitHub.
Is pinojs/pino-elasticsearch open source?
Yes — pinojs/pino-elasticsearch ships under the MIT license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/pinojs/pino-elasticsearch.
What is pinojs/pino-elasticsearch?
pinojs/pino-elasticsearch (pinojs/pino-elasticsearch) is a JavaScript project on GitHub. From the project's own README: 🌲 load pino logs into Elasticsearch
What license does pinojs/pino-elasticsearch use?
pinojs/pino-elasticsearch is released under the MIT license. Always verify the LICENSE file directly on GitHub for the authoritative terms — license strings can be edited out of sync with a project's actual stance.
Where do I read more about pinojs/pino-elasticsearch?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/pinojs/pino-elasticsearch is the definitive source.
Read full README in the tab above.
Want a second opinion on pino-elasticsearch?
Ask an AI that can read this page — one click and you get its take on pino-elasticsearch.