Coder Social home page Coder Social logo

peschuster / graphite-client Goto Github PK

View Code? Open in Web Editor NEW
84.0 84.0 27.0 2.32 MB

Windows (.NET) library and tools for feeding data into Graphite and statsD.

License: MIT License

C# 98.95% CSS 0.52% ASP 0.05% Batchfile 0.27% Pascal 0.20%
graphite metrics statsd

graphite-client's People

Contributors

mvickeryjg avatar peschuster avatar petegoo avatar sroblin avatar toqe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

graphite-client's Issues

Service crash

The service crashed. From Windows event log:

Faulting application name: PerfCounterMonitor.exe, version: 1.0.0.0, time stamp: 0x50c750e0
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17651, time stamp: 0x4e21213c
Exception code: 0xe0434352
Fault offset: 0x000000000000cacd
Faulting process id: 0x6c8
Faulting application start time: 0x01ceb362296af0d7
Faulting application path: C:\Program Files\PerfCounterMonitor\PerfCounterMonitor.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: b8ebafcd-2ebe-11e3-be95-005056800051
Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0

Problem signature:
P1: perfcountermonitor.exe
P2: 1.0.0.0
P3: 50c750e0
P4: mscorlib
P5: 4.0.0.0
P6: 4dd2341f
P7: 3ac
P8: 66
P9: System.ArgumentOutOfRange
P10: 

Attached files:
C:\Windows\Temp\WERBBC4.tmp.appcompat.txt
C:\Windows\Temp\WERBBD4.tmp.WERInternalMetadata.xml
C:\Windows\Temp\WERBBD5.tmp.hdmp
C:\Windows\Temp\WERCD5B.tmp.mdmp

These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_perfcountermonit_71a2902298d63b70c35fbb01dbdcb1a49c53777_cab_cdd1cdb6

Analysis symbol: 
Rechecking for solution: 0
Report Id: b8ebafcd-2ebe-11e3-be95-005056800051
Report Status: 4
Application: PerfCounterMonitor.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentOutOfRangeException
Stack:
   at System.Text.StringBuilder.ToString()
   at Graphite.System.AppPoolListener.Execute(System.String, System.String ByRef, Int32)
   at Graphite.System.AppPoolListener.GetCounterName(System.String)
   at Graphite.System.AppPoolListener.LoadCounterName()
   at System.Collections.Generic.List`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].ForEach(System.Action`1<System.__Canon>)
   at Graphite.System.Scheduler.TimerAction(System.Object)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading._TimerCallback.PerformTimerCallback(System.Object)

Check for hostname is invalid

Hi there,

Thanks for making this project!

I'm trying to sent metrics to Hosted Graphite using graphite-client and I'm having some problems with the check for valid hostnames.

The endpoint that we are trying to send to is 2bb950e4.carbon.hostedgraphite.com, but this fails your check for a valid hostname.

public const string ValidHostnamePattern = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

public const string ValidHostnamePattern = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

This regex fails for the hostname above.

Thanks,

Marc

Prefix Variable Substitution

Can we add variable substitution for prefixKey (very similar to NLog Layout Renderer)? This would be helpful if you're deploying services to multiple machines and would want to keep the config files same.

As an example:

<graphite xmlns="http://github.com/peschuster/Graphite/Configuration">
    <!--<graphite address="127.0.0.1" port="2003" transport="Tcp" />-->
    <statsd address="127.0.0.1" port="8125" prefixKey="${appsetting:env}.${machinename}.services" />
</graphite>

issue When updating DNS

Hello,

i'am using a DNS entry to send metrics but when i update my records graphite-client still send metrics to old IP.
It' should be nice to add the ability to refresh DNS

Support connection string

Is it possible to configure the client with connection string?

In our case it would be more convenient than separate configuration section. We use Octopus for deploying and there we could set connection strings according to environment (stage, production, etc.).

We already do that and graphite-client is the only dependency which requires configuration transformation in *.config file.

Question: distributed system with perfcountermonitors

Hello Peter,

We are planning to use just PerfCounterMonitor.exe for multipel servers of a distributed system, is there any best pratice that you could direct me to ?

Currently before action the question top on my head is can we configure all servers info into one .config file therefore just use one grahpite-client instance? or we should distribute multiple graphite-client insntances on those servers and connect them all back to the graphite server (will the port 2003 conflict in such way?)

Thanks

James

Best practice for using in a Failover Cluster?

How would you recommend using this in a Failover Cluster to get the right "host" out of the metrics forwarded?
To narrow down the scope a bit, specifically it's for SQL server, so it appears as the "cluster"/"instance" in the forwarded graphite, other roles might apply, like file server(if there is specific metrics for a mounted volume(YES!))

Suggestions?

EnsureConnected method in TcpPipe is not thread safe.

A SocketException is thrown when multiple listeners use the TcpPipeto report metrics.
The exception seems to be thrown when thetcpClient.Connect is called inside EnsureConnected method by multiple listeners at the same time.

Possible solutions could be

  • Calling tcpClient.Connect inside the TcpPipe constructor
  • Lock around tcpClient.Connect

More App Pool specific metrics?

Do you have any plans to add more app pool metrics than just working set? It'd be great to be able to pull any perfmon metric based on app pool name like .NET exceptions/sec, cpu usage, private bytes, etc. especially if you're already mapping the w3wp# to pid to app pool name.

Thanks!

Unable to build

Hi,

We have currentlu this error, can you help me ?
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1970,9):
error MSB3325: Cannot import the following key file: graphite_tsql.pfx. The ke
y file may be password protected. To correct this, try to import the certificat
e again or manually install the certificate to the Strong Name CSP with the fol
lowing key container name: VS_KEY_423AA2BF7DD16375 [D:\peschuster-graphite-clie
nt-9608766\peschuster-graphite-client-9608766\source\Graphite.TSql\Graphite.TSq
l.csproj]
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1970,9):
error MSB3321: Importing key file "graphite_tsql.pfx" was canceled. [D:\peschu
ster-graphite-client-9608766\peschuster-graphite-client-9608766\source\Graphite
.TSql\Graphite.TSql.csproj]

Prefix for graphite destination

I see that there is a prefix for statsd output, but not one for Graphite. Does this exist? If not, would be a good enhancement. Without it makes organizing metrics impossible.

problem in pushing metrics to statsd from .NET-CORE application

framework : dotnetcore 2.0, library used : Graphite.dll 1.3.0, System.Configuration.ConfigurationManager 4.5.0

I am trying to push application metrics to statsd using the following configuration:

app.config settings:
<configSections>
<section name="graphite" type="Graphite.Configuration.GraphiteConfiguration, Graphite" />
</configSections>
<graphite xmlns="http://github.com/peschuster/Graphite/Configuration">
<statsd address="10.32.2.9" port="8125" prefixKey="dapp.metrics" />
</graphite>

This is working fine from my local machine which is in windows 8.1.

Throwing the following exception when hosting it in azure windows server 2012:

System.InvalidOperationException: statsd pipe is not configured at Graphite.ChannelFactory.CreateChannel(String type, String target, Single sampling at Graphite.MetricsPipe.ReportCounter(String key, Int64 value, Single sampling at MyApplication.GraphiteMetricPublisher.PublishCount(String key)

In azure windows server 2016, no exception is getting thrown but metrics is also not pushed to statsd.

From all the above mentioned machines I am able to push data to statsd using bash script.

Using variables in PerfCounterMonitor.exe.config

Hello Peter,

How are you, it's me again =) we are trying to configure graphite-client as part of our graphite solution. It's great.

Here is just a enhancement question:

in this sample config clip:

<graphite.system xmlns="http://github.com/peschuster/Graphite/Configuration">
<counters>
  <clear />
 <add 
    key="servers.127_0_0_1.processor.usage" 
    category="Processor" instance="_Total" counter="% Processor Time" 
    type="gauge" target="graphite" interval="30" />
  <add 
    key="servers.127_0_0_1.memory.availableKB" 
    category="Memory" instance="" counter="Available KBytes" 
    type="gauge" target="graphite" interval="30" />

  <add 
    key="servers.127_0_0_1.network.totalBytes" 
    category="Network Interface" instance="isatap.melbourne.internal.redtribe.com" counter="Bytes Total/sec" 
    type="gauge" target="graphite" interval="30" />

<add 
    key="servers.127_0_0_1.network.currentBandWidth" 
    category="Network Interface" instance="isatap.melbourne.internal.redtribe.com" counter="Current Bandwidth" 
    type="gauge" target="graphite" interval="30" />

</counters>

See in every 'key' attribute I have to use same prefix to keep values in same folder on graphite, could it be a variable kind of thing in the xml such as

  <var name="hostname" value="servers.127_0_0_1"/>

and I can use key ="${hostname}" later , thus I just need change one value to change all, that will be great!

Regards

James

graphite/statsd server address

Hi,

am I only able to send data to a localhost statsd / graphite?
I can not findy any parameter for an external server - maybe I am blind :-)

value is exceeding Integer.Max

Hello,
firstly the tool is awsome. however I did find this seems like a bug or enhancement:

I am tracking through counter Memory.Available Bytes, which in my machine is a big number, and all values from graphite are -2147483648.0 which looks like they are over the boundary of integer. Is there any chance float or long can be used here ?

Regards

James

Where to find WebMetricsPipeProvider

We want to measure execution time of one MVC action. It seems like we need WebMetricsPipeProvider but it isn't included in any available nuget package. So how we intended to use it?

Currently we use custom ActionFilter which effectively copies WebMetricsPipeProvider:

  • Call StaticMetricsPipeProvider.Instance.Start in OnActionExecuting and store StaticMetricsPipeProvider.Current in HttpContext.Current.Items.
  • Call StaticMetricsPipeProvider.Instance.Stop in OnActionExecuted.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.