I hope there is a stats about metrics based on $programname, $severity, $fromhost-ip etc, extends the ruleset(impstats).
2015-10-07 16:19 GMT+08:00 singh.janmejay <[email protected]>: > -- > Regards, > Janmejay > > PS: Please blame the typos in this mail on my phone's uncivilized soft > keyboard sporting it's not-so-smart-assist technology. > > On Oct 7, 2015 3:26 AM, "David Lang" <[email protected]> wrote: > > > > On Wed, 7 Oct 2015, singh.janmejay wrote: > > > >> -- > >> Regards, > >> Janmejay > >> > >> PS: Please blame the typos in this mail on my phone's uncivilized soft > >> keyboard sporting it's not-so-smart-assist technology. > >> > >> On Oct 6, 2015 10:32 PM, "David Lang" <[email protected]> wrote: > >>> > >>> > >>> On Tue, 6 Oct 2015, singh.janmejay wrote: > >>> > >>>> It is possible to use global-variables (it'll require some > >>>> enhancements, table-support etc), but it'll be very inefficient > >>>> compared to this approach. For instance, choice of data-structure etc > >>>> allows making the solution a lot more efficient. > >>> > >>> > >>> > >>> As for the data structures, Rainer has been identifying inefficencies > in > >> > >> how json-c works and working to improve them > >>> > >>> > >> > >> That optimizes variable system. But it still is a general propose > variable > >> system. It can't and shouldn't understand relationship between > variables. > > > > > > what relationships are there between the different metrics? > > > > The fact that they are read in one shot, reported and reset. > > > > >>> > >>>> Here its possible to locklessly increment counters in most cases, so > >>>> its overhead is a lot lesser than global-variables. > >>> > >>> > >>> > >>> how can you manage counters in multiple threads without locks? > Especially > >> > >> when dealing with batches. > >>> > >>> > >> > >> Consider a trie based implementation. With bounded fanout-factor, it's > O(1) > >> wrt metric-names cardinality. It also has very little lock contention > >> involved. Usually operations work with read-locks, only when new metric > is > >> initialized it requires a write lock on patent node. If recycles are few > >> and far apart, lock contention would be negligible. > > > > > > if you have multiple threads that may need to update the same metric at > the same time, a tree doesn't eliminate the locking. > > > > The only situation involving a lock that is contended for, is when a metric > is to be initialized. Consider this trie: > > A -> B -> C > -> D > > Now for incrementing key ABC, no contention exists, because it involves > read-locks only. It just uses atomic-increment to bump the counter at node > C. Same for ABD. > > But ABE will require a write-lock at node B, because node E doesn't exist > yet. However key with not shared parent can again be initialized > concurrently. Init operation can be amortized over a large set of increment > operations making its cost negligible(this is the knob that reset interval > exposes). > > > The current json-c locking is being make intentionally over-broad right > now because it appears that some json-c code is not thread-safe and we > haven't identified it yet. Once that's tracked down and fixed (or json-c > replaced), updating one item should not require locking any more than that > item. > > > > > >>> > >>>> Recycle is precisely to allow this lockless mechanism to work. Its > >>>> basically saying, it'll track metric-names he has seen in last 1 hour. > >>>> If we kill tracking of it as soon as we don't see an increment > >>>> (between 2 reporting runs of impstats), it'll lead to unnecessary > >>>> churn when low-values are common or load is not uniform in time. > >>> > >>> > >>> > >>> that depends on the cost of initializing a metric vs the cost of > tracking > >> > >> the recycle mechanism. > >>> > >>> > >> > >> 0 value data-points can easily be filtered out. So they don't create any > >> processing overhead downstream. Cost of tracking for recycle is minimal > >> because it's a single counter bring tracked, when it reaches zero it's > >> reset to orig starting value and trie is killed after reporting > accumulated > >> stats. > > > > > > actually, filtering out 0 data-points can be a very bad thing. Far too > many monitoring tools produce stright-line graphs/estimates between > reported data-points, so it's very important to report 0 value data-points > > > > I agree. > > > > >>>> Implementing it on top of global-variables is not only has very high > >>>> performance-penalty(it'll be prohibitive for high-throughput > >>>> scenarios), it also exposes too much complexity to the user (where > >>>> user has to worry about reset etc). > >>>> > >>>> I don't plan to have a scheduler in this implementation. > >>>> GetAllStatsLines call will purge the tree instead of reset at that > >>>> interval. Its basically a balance between freeing-up memory occupied > >>>> by stale-metric-names vs. performance (lockless handling of > >>>> increment). So it will be governed by impstat schedule. May be I > >>>> should change name to better name (equivalent of > >>>> purge_known_keys_after_they_have_been_reported_N_times). > >>> > >>> > >>> > >>> if this is just adding additional metrics to the impstats output that > >> > >> eliminates the schedular/reset issue. > >>> > >>> > >>> I think we should have a metric configuration be fairly static, allow > >> > >> configuring custom metrics and add to them, but don't use data from the > >> message as part of the name of the metric, and continue reporting them > >> forever, even if they are 0 (so no need to 'recycle' names) > >> > >> Dynamic metrics are a real usecase for any shared system(utilisation > across > >> several users, several hosts, several clusters, several-subnets etc are > >> easily reportable with this). The only way to report utilisation in many > >> scenarios is to have dyn-metric names. The alternative is to pre-declare > >> all keys, but that to me is a more indirect solution. It's not as > >> flexible/adaptive. > >> > >> I think declarative static-key a useful feature on its own, for eg when > >> classifying reportable metric into buckets known in advance, but dyn-key > >> and configurable-static-key are not interchangeable. > > > > > > dynamic systems will have pathalogical failure condiditions. Consider > what happens when someone uses hostname in a dynafile template and then > some system starts spewing malformed logs that put garbage data in that > field. Creating hundreds or thousands of metric variables is much worse. > > The max-cardinality optional field in dyn-metric-namespace declaration was > exactly to prevent this kind of unbounded growth. We can choose a sensible > default. > > > > > I agree that pre-declared keys are less flexible, but they are also going > to be far safer and easier to deal with. > > > > > > David Lang > > _______________________________________________ > > rsyslog mailing list > > http://lists.adiscon.net/mailman/listinfo/rsyslog > > http://www.rsyslog.com/professional-services/ > > What's up with rsyslog? Follow https://twitter.com/rgerhards > > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad > of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > DON'T LIKE THAT. > _______________________________________________ > rsyslog mailing list > http://lists.adiscon.net/mailman/listinfo/rsyslog > http://www.rsyslog.com/professional-services/ > What's up with rsyslog? Follow https://twitter.com/rgerhards > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad > of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > DON'T LIKE THAT. > _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com/professional-services/ What's up with rsyslog? Follow https://twitter.com/rgerhards NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE THAT.

