作者:rajde
项目:bosu
func init() {
collectors = append(collectors, &IntervalCollector{F: c_network_windows, init: winNetworkInit})
c_winnetteam := &IntervalCollector{
F: c_network_team_windows,
}
// Make sure MSFT_NetImPlatAdapter and MSFT_NetAdapterStatisticsSettingData
// are valid WMI classes when initializing c_network_team_windows
c_winnetteam.init = func() {
var dstTeamNic []MSFT_NetLbfoTeamNic
var dstStats []MSFT_NetAdapterStatisticsSettingData
queryTeamAdapter = wmi.CreateQuery(&dstTeamNic, "")
queryTeamStats = wmi.CreateQuery(&dstStats, "")
c_winnetteam.Enable = func() bool {
errTeamNic := queryWmiNamespace(queryTeamAdapter, &dstTeamNic, namespaceStandardCimv2)
errStats := queryWmiNamespace(queryTeamStats, &dstStats, namespaceStandardCimv2)
result := errTeamNic == nil && errStats == nil
return result
}
}
collectors = append(collectors, c_winnetteam)
c := &IntervalCollector{
F: c_network_windows_tcp,
}
c.init = wmiInit(c, func() interface{} { return &[]Win32_PerfRawData_Tcpip_TCPv4{} }, "", &winNetTCPQuery)
collectors = append(collectors, c)
}
作者:mathp
项目:bosu
func metaWindowsIfaces() {
var dstConfigs []Win32_NetworkAdapterConfiguration
q := wmi.CreateQuery(&dstConfigs, "WHERE MACAddress != null")
err := wmi.Query(q, &dstConfigs)
if err != nil {
slog.Error(err)
return
}
mNicConfigs := make(map[uint32]*Win32_NetworkAdapterConfiguration)
for i, nic := range dstConfigs {
mNicConfigs[nic.InterfaceIndex] = &dstConfigs[i]
}
mNicTeamIDtoSpeed := make(map[string]uint64)
mNicTeamIDtoMaster := make(map[string]string)
var dstTeamMembers []MSFT_NetLbfoTeamMember
q = wmi.CreateQuery(&dstTeamMembers, "")
err = wmi.QueryNamespace(q, &dstTeamMembers, "root\\StandardCimv2")
if err == nil {
for _, teamMember := range dstTeamMembers {
mNicTeamIDtoSpeed[teamMember.InstanceID] = teamMember.ReceiveLinkSpeed
mNicTeamIDtoMaster[teamMember.InstanceID] = teamMember.Team
}
}
var dstAdapters []Win32_NetworkAdapter
q = wmi.CreateQuery(&dstAdapters, "WHERE PhysicalAdapter=True and MACAddress <> null and NetConnectionStatus = 2") //Only adapters with MAC addresses and status="Connected"
err = wmi.Query(q, &dstAdapters)
if err != nil {
slog.Error(err)
return
}
for _, v := range dstAdapters {
tag := opentsdb.TagSet{"iface": fmt.Sprint("Interface", v.InterfaceIndex)}
AddMeta("", tag, "description", v.Description, true)
AddMeta("", tag, "name", v.NetConnectionID, true)
AddMeta("", tag, "mac", strings.Replace(v.MACAddress, ":", "", -1), true)
if v.Speed != nil && *v.Speed != 0 {
AddMeta("", tag, "speed", v.Speed, true)
} else {
nicSpeed := mNicTeamIDtoSpeed[v.GUID]
AddMeta("", tag, "speed", nicSpeed, true)
}
nicMaster := mNicTeamIDtoMaster[v.GUID]
if nicMaster != "" {
AddMeta("", tag, "master", nicMaster, true)
}
nicConfig := mNicConfigs[v.InterfaceIndex]
if nicConfig != nil {
for _, ip := range *nicConfig.IPAddress {
AddMeta("", tag, "addr", ip, true) // blocked by array support in WMI See https://github.com/StackExchange/wmi/issues/5
}
}
}
}
作者:mathp
项目:bosu
func c_windows_memory() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_PerfOS_Memory
var q = wmi.CreateQuery(&dst, "")
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
Add(&md, "win.mem.cache", v.CacheBytes, nil, metadata.Gauge, metadata.Bytes, descWinMemCacheBytes)
Add(&md, "win.mem.cache_peak", v.CacheBytesPeak, nil, metadata.Gauge, metadata.Bytes, descWinMemCacheBytesPeak)
Add(&md, "win.mem.committed", v.CommittedBytes, nil, metadata.Gauge, metadata.Bytes, descWinMemCommittedBytes)
Add(&md, "win.mem.committed_limit", v.CommitLimit, nil, metadata.Gauge, metadata.Bytes, descWinMemCommitLimit)
Add(&md, "win.mem.committed_percent", float64(v.PercentCommittedBytesInUse)/float64(v.PercentCommittedBytesInUse_Base)*100, nil, metadata.Gauge, metadata.Pct, descWinMemPercentCommittedBytesInUse)
Add(&md, "win.mem.modified", v.ModifiedPageListBytes, nil, metadata.Gauge, metadata.Bytes, descWinMemModifiedPageListBytes)
Add(&md, "win.mem.page_faults", v.PageFaultsPersec, nil, metadata.Counter, metadata.PerSecond, descWinMemPageFaultsPersec)
Add(&md, "win.mem.faults", v.CacheFaultsPersec, opentsdb.TagSet{"type": "cache"}, metadata.Counter, metadata.PerSecond, descWinMemCacheFaultsPersec)
Add(&md, "win.mem.faults", v.DemandZeroFaultsPersec, opentsdb.TagSet{"type": "demand_zero"}, metadata.Counter, metadata.PerSecond, descWinMemDemandZeroFaultsPersec)
Add(&md, "win.mem.faults", v.TransitionFaultsPersec, opentsdb.TagSet{"type": "transition"}, metadata.Counter, metadata.PerSecond, descWinMemTransitionFaultsPersec)
Add(&md, "win.mem.faults", v.WriteCopiesPersec, opentsdb.TagSet{"type": "write_copies"}, metadata.Counter, metadata.PerSecond, descWinMemWriteCopiesPersec)
Add(&md, "win.mem.page_operations", v.PageReadsPersec, opentsdb.TagSet{"type": "read"}, metadata.Counter, metadata.PerSecond, descWinMemPageReadsPersec)
Add(&md, "win.mem.page_operations", v.PageWritesPersec, opentsdb.TagSet{"type": "write"}, metadata.Counter, metadata.PerSecond, descWinMemPageWritesPersec)
Add(&md, "win.mem.page_operations", v.PagesInputPersec, opentsdb.TagSet{"type": "input"}, metadata.Counter, metadata.PerSecond, descWinMemPagesInputPersec)
Add(&md, "win.mem.page_operations", v.PagesOutputPersec, opentsdb.TagSet{"type": "output"}, metadata.Counter, metadata.PerSecond, descWinMemPagesOutputPersec)
Add(&md, "win.mem.pool.bytes", v.PoolNonpagedBytes, opentsdb.TagSet{"type": "nonpaged"}, metadata.Gauge, metadata.Bytes, descWinMemPoolNonpagedBytes)
Add(&md, "win.mem.pool.bytes", v.PoolPagedBytes, opentsdb.TagSet{"type": "paged"}, metadata.Gauge, metadata.Bytes, descWinMemPoolPagedBytes)
Add(&md, "win.mem.pool.bytes", v.PoolPagedResidentBytes, opentsdb.TagSet{"type": "paged_resident"}, metadata.Gauge, metadata.Bytes, descWinMemPoolPagedResidentBytes)
Add(&md, "win.mem.pool.allocations", v.PoolPagedAllocs, opentsdb.TagSet{"type": "paged"}, metadata.Gauge, metadata.Operation, descWinMemPoolPagedAllocs)
Add(&md, "win.mem.pool.allocations", v.PoolNonpagedAllocs, opentsdb.TagSet{"type": "nonpaged"}, metadata.Gauge, metadata.Operation, descWinMemPoolNonpagedAllocs)
}
return md, nil
}
作者:eswd
项目:bosu
func c_diskspace_windows() (opentsdb.MultiDataPoint, error) {
var dst []Win32_LogicalDisk
var q = wmi.CreateQuery(&dst, "WHERE DriveType = 3 AND FreeSpace <> null")
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
tags := opentsdb.TagSet{"disk": v.Name}
space_used := v.Size - v.FreeSpace
Add(&md, "win.disk.fs.space_free", v.FreeSpace, tags, metadata.Gauge, metadata.Bytes, osDiskFreeDesc)
Add(&md, "win.disk.fs.space_total", v.Size, tags, metadata.Gauge, metadata.Bytes, osDiskTotalDesc)
Add(&md, "win.disk.fs.space_used", space_used, tags, metadata.Gauge, metadata.Bytes, osDiskUsedDesc)
Add(&md, osDiskFree, v.FreeSpace, tags, metadata.Gauge, metadata.Bytes, osDiskFreeDesc)
Add(&md, osDiskTotal, v.Size, tags, metadata.Gauge, metadata.Bytes, osDiskTotalDesc)
Add(&md, osDiskUsed, space_used, tags, metadata.Gauge, metadata.Bytes, osDiskUsedDesc)
if v.Size != 0 {
percent_free := float64(v.FreeSpace) / float64(v.Size) * 100
Add(&md, "win.disk.fs.percent_free", percent_free, tags, metadata.Gauge, metadata.Pct, osDiskPctFreeDesc)
Add(&md, osDiskPctFree, percent_free, tags, metadata.Gauge, metadata.Pct, osDiskPctFreeDesc)
}
if v.VolumeName != "" {
metadata.AddMeta("", tags, "label", v.VolumeName, true)
}
}
return md, nil
}
作者:eswd
项目:bosu
func wmiInitNamespace(c *IntervalCollector, dst func() interface{}, where string, query *string, namespace string) func() {
return func() {
*query = wmi.CreateQuery(dst(), where)
c.Enable = func() bool {
return queryWmiNamespace(*query, dst(), namespace) == nil
}
}
}
作者:rajde
项目:bosu
// winNetworkInit maintains a mapping of InstanceName to InterfaceIndex
func winNetworkInit() {
update := func() {
var dstNetworkAdapter []Win32_NetworkAdapter
q := wmi.CreateQuery(&dstNetworkAdapter, "WHERE PhysicalAdapter=True and MACAddress <> null")
err := queryWmi(q, &dstNetworkAdapter)
if err != nil {
slog.Error(err)
return
}
for _, nic := range dstNetworkAdapter {
var iface = fmt.Sprint("Interface", nic.InterfaceIndex)
// Get PnPName using Win32_PnPEntity class
var pnpname = ""
var escapeddeviceid = strings.Replace(nic.PNPDeviceID, "\\", "\\\\", -1)
var filter = fmt.Sprintf("WHERE DeviceID='%s'", escapeddeviceid)
var dstPnPName []Win32_PnPEntity
q = wmi.CreateQuery(&dstPnPName, filter)
err = queryWmi(q, &dstPnPName)
if err != nil {
slog.Error(err)
return
}
for _, pnp := range dstPnPName { // Really should be a single item
pnpname = pnp.Name
}
if pnpname == "" {
slog.Errorf("%s cannot find Win32_PnPEntity %s", iface, filter)
continue
}
// Convert to instance name (see http://goo.gl/jfq6pq )
instanceName := winNetworkToInstanceName(pnpname)
mNicInstanceNameToInterfaceIndex[instanceName] = iface
}
}
update()
go func() {
for range time.Tick(time.Minute * 5) {
update()
}
}()
}
作者:eswd
项目:bosu
func c_meta_windows_version() (opentsdb.MultiDataPoint, error) {
var md opentsdb.MultiDataPoint
var dst []Win32_OperatingSystem
q := wmi.CreateQuery(&dst, "")
err := wmi.Query(q, &dst)
if err != nil {
slog.Error(err)
return md, err
}
var dstComputer []Win32_ComputerSystem
q = wmi.CreateQuery(&dstComputer, "")
err = wmi.Query(q, &dstComputer)
if err != nil {
slog.Error(err)
return md, err
}
var dstBIOS []Win32_BIOS
q = wmi.CreateQuery(&dstBIOS, "")
err = wmi.Query(q, &dstBIOS)
if err != nil {
slog.Error(err)
return md, err
}
for _, v := range dst {
metadata.AddMeta("", nil, "version", v.Version, true)
metadata.AddMeta("", nil, "versionCaption", v.Caption, true)
}
for _, v := range dstComputer {
metadata.AddMeta("", nil, "manufacturer", v.Manufacturer, true)
metadata.AddMeta("", nil, "model", v.Model, true)
metadata.AddMeta("", nil, "memoryTotal", v.TotalPhysicalMemory, true)
}
for _, v := range dstBIOS {
metadata.AddMeta("", nil, "serialNumber", v.SerialNumber, true)
}
return md, nil
}
作者:mathp
项目:bosu
func metaWindowsVersion() {
var dst []Win32_OperatingSystem
q := wmi.CreateQuery(&dst, "")
err := wmi.Query(q, &dst)
if err != nil {
slog.Error(err)
return
}
var dstComputer []Win32_ComputerSystem
q = wmi.CreateQuery(&dstComputer, "")
err = wmi.Query(q, &dstComputer)
if err != nil {
slog.Error(err)
return
}
var dstBIOS []Win32_BIOS
q = wmi.CreateQuery(&dstBIOS, "")
err = wmi.Query(q, &dstBIOS)
if err != nil {
slog.Error(err)
return
}
for _, v := range dst {
AddMeta("", nil, "version", v.Version, true)
AddMeta("", nil, "versionCaption", v.Caption, true)
}
for _, v := range dstComputer {
AddMeta("", nil, "manufacturer", v.Manufacturer, true)
AddMeta("", nil, "model", v.Model, true)
AddMeta("", nil, "memoryTotal", v.TotalPhysicalMemory, true)
}
for _, v := range dstBIOS {
AddMeta("", nil, "serialNumber", v.SerialNumber, true)
}
}
作者:eswd
项目:bosu
func c_windows_process_total() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_PerfProc_Process
var q = wmi.CreateQuery(&dst, `WHERE Name = '_Total'`)
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
Add(&md, "win.system.handle_count", v.HandleCount, nil, metadata.Gauge, metadata.Count, descWinSystemHandle_count)
}
return md, nil
}
作者:eswd
项目:bosu
func c_mssql_replica_resources() (opentsdb.MultiDataPoint, error) {
var dst []MSCluster_Resource
//Only report metrics for resources owned by this node
var q = wmi.CreateQuery(&dst, fmt.Sprintf("WHERE OwnerNode = '%s'", util.Hostname))
if err := queryWmiNamespace(q, &dst, rootMSCluster); err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
Add(&md, "mssql.replica.resource_state", v.State, opentsdb.TagSet{"group": v.OwnerGroup, "type": v.Type, "name": v.Name}, metadata.Gauge, metadata.StatusCode, descMSSQLReplicaResourceState)
}
return md, nil
}
作者:eswd
项目:bosu
func c_cpu_windows() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_PerfOS_Processor
var q = wmi.CreateQuery(&dst, "")
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
var used, num uint64
var winCPUTotalPerfOS *Win32_PerfRawData_PerfOS_Processor
for _, v := range dst {
if v.Name == "_Total" {
winCPUTotalPerfOS = &v
continue
}
ts := TSys100NStoEpoch(v.Timestamp_Sys100NS)
tags := opentsdb.TagSet{"cpu": v.Name}
num++
//Divide by 1e5 because: 1 seconds / 100 Nanoseconds = 1e7. This is the percent time as a decimal, so divide by two less zeros to make it the same as the result * 100.
used += (v.PercentUserTime + v.PercentPrivilegedTime + v.PercentInterruptTime) / 1e5
AddTS(&md, winCPU, ts, v.PercentPrivilegedTime/1e5, opentsdb.TagSet{"type": "privileged"}.Merge(tags), metadata.Counter, metadata.Pct, descWinCPUPrivileged)
AddTS(&md, winCPU, ts, v.PercentInterruptTime/1e5, opentsdb.TagSet{"type": "interrupt"}.Merge(tags), metadata.Counter, metadata.Pct, descWinCPUInterrupt)
AddTS(&md, winCPU, ts, v.PercentUserTime/1e5, opentsdb.TagSet{"type": "user"}.Merge(tags), metadata.Counter, metadata.Pct, descWinCPUUser)
AddTS(&md, winCPU, ts, v.PercentIdleTime/1e5, opentsdb.TagSet{"type": "idle"}.Merge(tags), metadata.Counter, metadata.Pct, descWinCPUIdle)
AddTS(&md, "win.cpu.interrupts", ts, v.InterruptsPersec, tags, metadata.Counter, metadata.Event, descWinCPUInterrupts)
Add(&md, "win.cpu.dpcs", v.DPCRate, tags, metadata.Gauge, metadata.Event, descWinCPUDPC)
}
if num > 0 {
cpu := used / num
Add(&md, osCPU, cpu, nil, metadata.Counter, metadata.Pct, "")
}
if winCPUTotalPerfOS != nil {
v := winCPUTotalPerfOS
ts := TSys100NStoEpoch(v.Timestamp_Sys100NS)
AddTS(&md, winCPUTotal, ts, v.PercentPrivilegedTime/1e5, opentsdb.TagSet{"type": "privileged"}, metadata.Counter, metadata.Pct, descWinCPUPrivileged)
AddTS(&md, winCPUTotal, ts, v.PercentInterruptTime/1e5, opentsdb.TagSet{"type": "interrupt"}, metadata.Counter, metadata.Pct, descWinCPUInterrupt)
AddTS(&md, winCPUTotal, ts, v.PercentUserTime/1e5, opentsdb.TagSet{"type": "user"}, metadata.Counter, metadata.Pct, descWinCPUUser)
AddTS(&md, winCPUTotal, ts, v.PercentIdleTime/1e5, opentsdb.TagSet{"type": "idle"}, metadata.Counter, metadata.Pct, descWinCPUIdle)
AddTS(&md, "win.cpu_total.interrupts", ts, v.InterruptsPersec, nil, metadata.Counter, metadata.Event, descWinCPUInterrupts)
Add(&md, "win.cpu_total.dpcs", v.DPCRate, nil, metadata.Gauge, metadata.Event, descWinCPUDPC)
AddTS(&md, winCPUCStates, ts, v.PercentC1Time/1e5, opentsdb.TagSet{"cpu": "total", "type": "c1"}, metadata.Counter, metadata.Pct, descWinCPUC1)
AddTS(&md, winCPUCStates, ts, v.PercentC2Time/1e5, opentsdb.TagSet{"cpu": "total", "type": "c2"}, metadata.Counter, metadata.Pct, descWinCPUC2)
AddTS(&md, winCPUCStates, ts, v.PercentC3Time/1e5, opentsdb.TagSet{"cpu": "total", "type": "c3"}, metadata.Counter, metadata.Pct, descWinCPUC3)
}
return md, nil
}
作者:eswd
项目:bosu
func c_mssql_databases() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases
var q = wmi.CreateQuery(&dst, `WHERE Name <> '_Total'`)
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
tags := opentsdb.TagSet{"db": v.Name}
Add(&md, "mssql.active_transactions", v.ActiveTransactions, tags, metadata.Gauge, metadata.Count, descMSSQLActiveTransactions)
Add(&md, "mssql.backup_restore_throughput", v.BackupPerRestoreThroughputPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLBackupPerRestoreThroughputPersec)
Add(&md, "mssql.bulkcopy_rows", v.BulkCopyRowsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLBulkCopyRowsPersec)
Add(&md, "mssql.bulkcopy_throughput", v.BulkCopyThroughputPersec, tags, metadata.Counter, metadata.KBytes, descMSSQLBulkCopyThroughputPersec)
Add(&md, "mssql.commit_table_entries", v.Committableentries, tags, metadata.Gauge, metadata.Count, descMSSQLCommittableentries)
Add(&md, "mssql.data_files_size", v.DataFilesSizeKB*1024, tags, metadata.Gauge, metadata.Bytes, descMSSQLDataFilesSizeKB)
Add(&md, "mssql.dbcc_logical_scan_bytes", v.DBCCLogicalScanBytesPersec, tags, metadata.Counter, metadata.BytesPerSecond, descMSSQLDBCCLogicalScanBytesPersec)
//Add(&md, "mssql.group_commit_time", v.GroupCommitTimePersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLGroupCommitTimePersec)
Add(&md, "mssql.log_bytes_flushed", v.LogBytesFlushedPersec, tags, metadata.Counter, metadata.BytesPerSecond, descMSSQLLogBytesFlushedPersec)
Add(&md, "mssql.log_cache_hit_ratio", v.LogCacheHitRatio, tags, metadata.Counter, metadata.Pct, descMSSQLLogCacheHitRatio)
Add(&md, "mssql.log_cache_hit_ratio_base", v.LogCacheHitRatio_Base, tags, metadata.Counter, metadata.None, descMSSQLLogCacheHitRatio_Base)
Add(&md, "mssql.log_cache_reads", v.LogCacheReadsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLogCacheReadsPersec)
Add(&md, "mssql.log_files_size", v.LogFilesSizeKB*1024, tags, metadata.Gauge, metadata.Bytes, descMSSQLLogFilesSizeKB)
Add(&md, "mssql.log_files_used_size", v.LogFilesUsedSizeKB*1024, tags, metadata.Gauge, metadata.Bytes, descMSSQLLogFilesUsedSizeKB)
Add(&md, "mssql.log_flushes", v.LogFlushesPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLogFlushesPersec)
Add(&md, "mssql.log_flush_waits", v.LogFlushWaitsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLogFlushWaitsPersec)
Add(&md, "mssql.log_flush_wait_time", v.LogFlushWaitTime, tags, metadata.Counter, metadata.MilliSecond, descMSSQLLogFlushWaitTime)
//Add(&md, "mssql.log_flush_write_time_ms", v.LogFlushWriteTimems, tags, metadata.Counter, metadata.MilliSecond, descMSSQLLogFlushWriteTimems)
Add(&md, "mssql.log_growths", v.LogGrowths, tags, metadata.Gauge, metadata.Count, descMSSQLLogGrowths)
//Add(&md, "mssql.log_pool_cache_misses", v.LogPoolCacheMissesPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLogPoolCacheMissesPersec)
//Add(&md, "mssql.log_pool_disk_reads", v.LogPoolDiskReadsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLogPoolDiskReadsPersec)
//Add(&md, "mssql.log_pool_requests", v.LogPoolRequestsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLogPoolRequestsPersec)
Add(&md, "mssql.log_shrinks", v.LogShrinks, tags, metadata.Gauge, metadata.Count, descMSSQLLogShrinks)
Add(&md, "mssql.log_truncations", v.LogTruncations, tags, metadata.Gauge, metadata.Count, descMSSQLLogTruncations)
Add(&md, "mssql.percent_log_used", v.PercentLogUsed, tags, metadata.Gauge, metadata.Pct, descMSSQLPercentLogUsed)
Add(&md, "mssql.repl_pending_xacts", v.ReplPendingXacts, tags, metadata.Gauge, metadata.Count, descMSSQLReplPendingXacts)
Add(&md, "mssql.repl_trans_rate", v.ReplTransRate, tags, metadata.Counter, metadata.PerSecond, descMSSQLReplTransRate)
Add(&md, "mssql.shrink_data_movement_bytes", v.ShrinkDataMovementBytesPersec, tags, metadata.Counter, metadata.BytesPerSecond, descMSSQLShrinkDataMovementBytesPersec)
Add(&md, "mssql.tracked_transactions", v.TrackedtransactionsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLTrackedtransactionsPersec)
Add(&md, "mssql.transactions", v.TransactionsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLTransactionsPersec)
Add(&md, "mssql.write_transactions", v.WriteTransactionsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLWriteTransactionsPersec)
}
return md, nil
}
作者:eswd
项目:bosu
func init() {
c := &IntervalCollector{
F: c_mssql,
}
c.init = wmiInit(c, func() interface{} { return &[]Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics{} }, `WHERE Name <> '_Total'`, &sqlQuery)
collectors = append(collectors, c)
var dstCluster []MSCluster_Cluster
var q = wmi.CreateQuery(&dstCluster, ``)
if err := queryWmiNamespace(q, &dstCluster, rootMSCluster); err != nil {
sqlClusterName = "None"
} else if len(dstCluster) != 1 {
sqlClusterName = "Unknown"
} else {
sqlClusterName = dstCluster[0].Name
}
c_replica_db := &IntervalCollector{
F: c_mssql_replica_db,
}
c_replica_db.init = wmiInit(c_replica_db, func() interface{} { return &[]Win32_PerfRawData_MSSQLSERVER_SQLServerDatabaseReplica{} }, `WHERE Name <> '_Total'`, &sqlAGDBQuery)
collectors = append(collectors, c_replica_db)
c_replica_server := &IntervalCollector{
F: c_mssql_replica_server,
}
c_replica_server.init = wmiInit(c_replica_server, func() interface{} { return &[]Win32_PerfRawData_MSSQLSERVER_SQLServerAvailabilityReplica{} }, `WHERE Name <> '_Total'`, &sqlAGQuery)
collectors = append(collectors, c_replica_server)
c_replica_votes := &IntervalCollector{
F: c_mssql_replica_votes,
Interval: time.Minute * 5,
}
c_replica_votes.init = wmiInitNamespace(c_replica_votes, func() interface{} { return &[]MSCluster_Node{} }, fmt.Sprintf("WHERE Name = '%s'", util.Hostname), &sqlAGVotes, rootMSCluster)
collectors = append(collectors, c_replica_votes)
c_replica_resources := &IntervalCollector{
F: c_mssql_replica_resources,
Interval: time.Minute,
}
c_replica_resources.init = wmiInitNamespace(c_replica_resources, func() interface{} { return &[]MSCluster_Resource{} }, ``, &sqlAGResources, rootMSCluster)
collectors = append(collectors, c_replica_resources)
}
作者:rajde
项目:bosu
func c_network_windows() (opentsdb.MultiDataPoint, error) {
var dstStats []Win32_PerfRawData_Tcpip_NetworkInterface
var q = wmi.CreateQuery(&dstStats, "")
err := queryWmi(q, &dstStats)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, nicStats := range dstStats {
if interfaceExclusions.MatchString(nicStats.Name) {
continue
}
iface := mNicInstanceNameToInterfaceIndex[nicStats.Name]
if iface == "" {
continue
}
// This does NOT include TEAM network adapters. Those will go to os.net.bond
tagsIn := opentsdb.TagSet{"iface": iface, "direction": "in"}
tagsOut := opentsdb.TagSet{"iface": iface, "direction": "out"}
Add(&md, "win.net.ifspeed", nicStats.CurrentBandwidth, opentsdb.TagSet{"iface": iface}, metadata.Gauge, metadata.BitsPerSecond, descWinNetCurrentBandwidth)
Add(&md, "win.net.bytes", nicStats.BytesReceivedPersec, tagsIn, metadata.Counter, metadata.BytesPerSecond, descWinNetBytesReceivedPersec)
Add(&md, "win.net.bytes", nicStats.BytesSentPersec, tagsOut, metadata.Counter, metadata.BytesPerSecond, descWinNetBytesSentPersec)
Add(&md, "win.net.packets", nicStats.PacketsReceivedPersec, tagsIn, metadata.Counter, metadata.PerSecond, descWinNetPacketsReceivedPersec)
Add(&md, "win.net.packets", nicStats.PacketsSentPersec, tagsOut, metadata.Counter, metadata.PerSecond, descWinNetPacketsSentPersec)
Add(&md, "win.net.dropped", nicStats.PacketsOutboundDiscarded, tagsOut, metadata.Counter, metadata.PerSecond, descWinNetPacketsOutboundDiscarded)
Add(&md, "win.net.dropped", nicStats.PacketsReceivedDiscarded, tagsIn, metadata.Counter, metadata.PerSecond, descWinNetPacketsReceivedDiscarded)
Add(&md, "win.net.errs", nicStats.PacketsOutboundErrors, tagsOut, metadata.Counter, metadata.PerSecond, descWinNetPacketsOutboundErrors)
Add(&md, "win.net.errs", nicStats.PacketsReceivedErrors, tagsIn, metadata.Counter, metadata.PerSecond, descWinNetPacketsReceivedErrors)
Add(&md, osNetIfSpeed, nicStats.CurrentBandwidth/1000000, opentsdb.TagSet{"iface": iface}, metadata.Gauge, metadata.Megabit, osNetIfSpeedDesc)
Add(&md, osNetBytes, nicStats.BytesReceivedPersec, tagsIn, metadata.Counter, metadata.BytesPerSecond, osNetBytesDesc)
Add(&md, osNetBytes, nicStats.BytesSentPersec, tagsOut, metadata.Counter, metadata.BytesPerSecond, osNetBytesDesc)
Add(&md, osNetPackets, nicStats.PacketsReceivedPersec, tagsIn, metadata.Counter, metadata.PerSecond, osNetPacketsDesc)
Add(&md, osNetPackets, nicStats.PacketsSentPersec, tagsOut, metadata.Counter, metadata.PerSecond, osNetPacketsDesc)
Add(&md, osNetDropped, nicStats.PacketsOutboundDiscarded, tagsOut, metadata.Counter, metadata.PerSecond, osNetDroppedDesc)
Add(&md, osNetDropped, nicStats.PacketsReceivedDiscarded, tagsIn, metadata.Counter, metadata.PerSecond, osNetDroppedDesc)
Add(&md, osNetErrors, nicStats.PacketsOutboundErrors, tagsOut, metadata.Counter, metadata.PerSecond, osNetErrorsDesc)
Add(&md, osNetErrors, nicStats.PacketsReceivedErrors, tagsIn, metadata.Counter, metadata.PerSecond, osNetErrorsDesc)
}
return md, nil
}
作者:mathp
项目:bosu
func c_simple_mem_windows() (opentsdb.MultiDataPoint, error) {
var dst []Win32_OperatingSystem
var q = wmi.CreateQuery(&dst, "")
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
Add(&md, "win.mem.vm.total", v.TotalVirtualMemorySize*1024, nil, metadata.Gauge, metadata.Bytes, descWinMemVirtual_Total)
Add(&md, "win.mem.vm.free", v.FreeVirtualMemory*1024, nil, metadata.Gauge, metadata.Bytes, descWinMemVirtual_Free)
Add(&md, "win.mem.total", v.TotalVisibleMemorySize*1024, nil, metadata.Gauge, metadata.Bytes, descWinMemVisible_Total)
Add(&md, "win.mem.free", v.FreePhysicalMemory*1024, nil, metadata.Gauge, metadata.Bytes, descWinMemVisible_Free)
Add(&md, osMemTotal, v.TotalVisibleMemorySize*1024, nil, metadata.Gauge, metadata.Bytes, osMemTotalDesc)
Add(&md, osMemFree, v.FreePhysicalMemory*1024, nil, metadata.Gauge, metadata.Bytes, osMemFreeDesc)
Add(&md, osMemUsed, v.TotalVisibleMemorySize*1024-v.FreePhysicalMemory*1024, nil, metadata.Gauge, metadata.Bytes, osMemUsedDesc)
Add(&md, osMemPctFree, float64(v.FreePhysicalMemory)/float64(v.TotalVisibleMemorySize)*100, nil, metadata.Gauge, metadata.Pct, osMemPctFreeDesc)
}
return md, nil
}
作者:eswd
项目:bosu
func c_mssql_locks() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_MSSQLSERVER_SQLServerLocks
var q = wmi.CreateQuery(&dst, `WHERE Name = 'Page' OR Name = 'Extent' OR Name = 'Object' or Name = 'Database'`)
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
tags := opentsdb.TagSet{"type": v.Name}
Add(&md, "mssql.lock_wait_time", v.AverageWaitTimems, tags, metadata.Counter, metadata.MilliSecond, descMSSQLAverageWaitTimems)
Add(&md, "mssql.lock_requests", v.LockRequestsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLockRequestsPersec)
Add(&md, "mssql.lock_timeouts", v.LockTimeoutsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLockTimeoutsPersec)
Add(&md, "mssql.lock_timeouts0", v.LockTimeoutstimeout0Persec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLockTimeoutstimeout0Persec)
Add(&md, "mssql.lock_waits", v.LockWaitsPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLLockWaitsPersec)
Add(&md, "mssql.deadlocks", v.NumberofDeadlocksPersec, tags, metadata.Counter, metadata.PerSecond, descMSSQLNumberofDeadlocksPersec)
}
return md, nil
}
作者:mathp
项目:bosu
func c_windows_pagefile() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PageFileUsage
var q = wmi.CreateQuery(&dst, "")
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
driveletter := "unknown"
if len(v.Name) >= 1 {
driveletter = v.Name[0:1]
}
tags := opentsdb.TagSet{"drive": driveletter}
Add(&md, "win.mem.pagefile.size", int64(v.AllocatedBaseSize)*1024*1024, tags, metadata.Gauge, metadata.Bytes, descWinMemPagefileAllocatedBaseSize)
Add(&md, "win.mem.pagefile.usage_current", int64(v.CurrentUsage)*1024*1024, tags, metadata.Gauge, metadata.Bytes, descWinMemPagefileCurrentUsage)
Add(&md, "win.mem.pagefile.usage_peak", int64(v.PeakUsage)*1024*1024, tags, metadata.Gauge, metadata.Bytes, descWinMemPagefilePeakUsage)
Add(&md, "win.mem.pagefile.usage_percent", float64(v.CurrentUsage)/float64(v.AllocatedBaseSize)*100, tags, metadata.Gauge, metadata.Pct, descWinMemPagefilePercent)
}
return md, nil
}
作者:eswd
项目:bosu
func c_mssql_general() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics
var q = wmi.CreateQuery(&dst, `WHERE Name <> '_Total'`)
if err := queryWmi(q, &dst); err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
Add(&md, "mssql.user_connections", v.UserConnections, nil, metadata.Gauge, metadata.Count, descMSSQLUserConnections)
Add(&md, "mssql.connection_resets", v.ConnectionResetPersec, nil, metadata.Counter, metadata.PerSecond, descMSSQLConnectionResetPersec)
Add(&md, "mssql.logins", v.LoginsPersec, nil, metadata.Counter, metadata.PerSecond, descMSSQLLoginsPersec)
Add(&md, "mssql.logouts", v.LogoutsPersec, nil, metadata.Counter, metadata.PerSecond, descMSSQLLogoutsPersec)
Add(&md, "mssql.mars_deadlocks", v.MarsDeadlocks, nil, metadata.Counter, metadata.Count, descMSSQLMarsDeadlocks)
Add(&md, "mssql.proc_blocked", v.Processesblocked, nil, metadata.Gauge, metadata.Count, descMSSQLProcessesblocked)
Add(&md, "mssql.temptables_created", v.TempTablesCreationRate, nil, metadata.Counter, metadata.PerSecond, descMSSQLTempTablesCreationRate)
Add(&md, "mssql.temptables_to_destroy", v.TempTablesForDestruction, nil, metadata.Gauge, metadata.Count, descMSSQLTempTablesForDestruction)
Add(&md, "mssql.transactions_total", v.Transactions, nil, metadata.Gauge, metadata.Count, descMSSQLTransactions)
}
return md, nil
}
作者:eswd
项目:bosu
func c_cpu_info_windows() (opentsdb.MultiDataPoint, error) {
var dst []Win32_Processor
var q = wmi.CreateQuery(&dst, `WHERE Name <> '_Total'`)
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
tags := opentsdb.TagSet{"cpu": strings.Replace(v.DeviceID, "CPU", "", 1)}
Add(&md, osCPUClock, v.CurrentClockSpeed, tags, metadata.Gauge, metadata.MHz, osCPUClockDesc)
Add(&md, "win.cpu.clock", v.CurrentClockSpeed, tags, metadata.Gauge, metadata.MHz, descWinCPUClock)
Add(&md, "win.cpu.clock_max", v.MaxClockSpeed, tags, metadata.Gauge, metadata.MHz, descWinCPUClockMax)
Add(&md, "win.cpu.voltage", v.CurrentVoltage, tags, metadata.Gauge, metadata.V10, descWinCPUVoltage)
Add(&md, "win.cpu.cores_physical", v.NumberOfCores, tags, metadata.Gauge, metadata.Count, descWinCPUCores)
Add(&md, "win.cpu.cores_logical", v.NumberOfLogicalProcessors, tags, metadata.Gauge, metadata.Count, descWinCPUCoresLogical)
if v.LoadPercentage != nil {
Add(&md, "win.cpu.load", *v.LoadPercentage, tags, metadata.Gauge, metadata.Pct, descWinCPULoad)
}
}
return md, nil
}
作者:eswd
项目:bosu
func c_system_windows() (opentsdb.MultiDataPoint, error) {
var dst []Win32_PerfRawData_PerfOS_System
var q = wmi.CreateQuery(&dst, "")
err := queryWmi(q, &dst)
if err != nil {
return nil, err
}
var md opentsdb.MultiDataPoint
for _, v := range dst {
//see http://microsoft.public.win32.programmer.wmi.narkive.com/09kqthVC/lastbootuptime
var uptime = (v.Timestamp_Object - v.SystemUpTime) / v.Frequency_Object
Add(&md, "win.system.context_switches", v.ContextSwitchesPersec, nil, metadata.Counter, metadata.ContextSwitch, descWinSystemContextSwitchesPersec)
Add(&md, "win.system.exceptions", v.ExceptionDispatchesPersec, nil, metadata.Counter, metadata.PerSecond, descWinSystemExceptionDispatchesPersec)
Add(&md, "win.system.cpu_queue", v.ProcessorQueueLength, nil, metadata.Gauge, metadata.Count, descWinSystemProcessorQueueLength)
Add(&md, "win.system.syscall", v.SystemCallsPersec, nil, metadata.Counter, metadata.Syscall, descWinSystemSystemCallsPersec)
Add(&md, "win.system.threads", v.Threads, nil, metadata.Gauge, metadata.Count, descWinSystemThreads)
Add(&md, "win.system.uptime", uptime, nil, metadata.Gauge, metadata.Second, osSystemUptimeDesc)
Add(&md, "win.system.processes", v.Processes, nil, metadata.Gauge, metadata.Count, descWinSystemProcesses)
Add(&md, osSystemUptime, uptime, nil, metadata.Gauge, metadata.Second, osSystemUptimeDesc)
}
return md, nil
}