airbnb / plog Goto Github PK
View Code? Open in Web Editor NEWFire-and-forget UDP logging service with custom Netty pipelines & extensive monitoring
License: Apache License 2.0
Fire-and-forget UDP logging service with custom Netty pipelines & extensive monitoring
License: Apache License 2.0
As soon as that feature is ironed out and used in production, we should document them filters properly.
Verify that each UDP listener has its own receiving threads.
It would be useful to expose minimal histograms of GC stats.
See ManagementFactory.getGarbageCollectorMXBeans()
Proposal to be reviewed:
\0
as a line prefix for advanced protocol.Based on #10.
byte[][]
in Message
.Netty offers a native transport.
It should soon allow for great perf improvements by using recvmmsg
/sendmmsg
.
See netty/netty#2719 for early support.
Sadly Plog currently hardcodes the transport to Nio. This should be configurable.
See ManagementFactory.getMemoryMXBean()
.
If messages reach the end of the pipeline, we should do something about it.
Separate but similar to end of pipeline exceptions counting mechanism?
Would break the config format.
~~README.mdon https://github.com/ajoberstar/gradle-git should cover it.~~ (doesn't support
git describe`-like naming)
Tags like v4.0.0 should turn version into "4.0.0", and non-tagged releases should contain an unique suffix.
This will make it easy to spin separate projects off, like plog-upshot.
With min_size=1, max_size=1, size_increments=1,
Exception in thread "main" java.lang.RuntimeException: No sizes! Decrease plog.stress.size_increments
Stats are a bit limited right now; per-port stats would be really useful, but keeping global stats would be nice too.
Currently, each UDP and TCP port has to be fully configured.
Offer UDP & TCP default configuration sections that get merged with each port at startup.
We should keep Plog simple and focused. However app-specific filters could provide value: fire-and-forget eventing in apps is great, but when events need some extra work, there's currently no good way to keep that work local (hence distributed horizontally and away from network spies) yet out of the app workers.
Such tasks could include filtering out sensitive information, converting messages between formats, annotating them with information about the host or its state, etc.
We could have per-port filters, with the following design decisions for a first shot:
In the port config, add the optional:
filters = [
{ provider: "your.class",
...
}, ...
]
your.class
would be found in the classpath, have to implement:
interface FilterProvider { PlogFilter getHandler(Config cfg); }
And PlogFilter
in turn:
interface PlogFilter extends ChannelHandler { /* extras? */ }
This model would allow handlers to hold state, turn each message into zero or more messages, let exceptions get logged and counted in our stats (TBV).
Questions left out of this initial implementation, hopefully forever as they would add complexity:
The stats format changed with the move to custom handler chains.
Adapt the datadog plugin, make use of the YAML config file to specify what should be reported.
Allow filters to report stats.
Netty allows us to bind multiple times, which is a very useful performance improvement for UDP sockets under Linux as it allows for multiple listeners.
In that case, it would be useful to allow threads = 0
and skip the thread pool altogether in UDPListener
, to avoid the dispatch overhead (including extra context switches).
kt:foo
and kt:bar
tags, forward the message to the foo
and bar
topics.null
can be used for the default or tag to avoid sending to Kafka, for example for warmup or to use the same port for multiple sinks and client-side routing.So no need to firewall off.
... so we can sum them into a single metric.
System properties aren't that great.
Could be useful to companies relying on JMX for monitoring, eg via Jolokia.
The classpath should match testCompile
in plog-distro
.
This could be very useful to quickly hack around stuff.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.