windows_exporter/collector/ad.go

1329 lines
45 KiB
Go

//go:build windows
// +build windows
package collector
import (
"errors"
"github.com/go-kit/log"
"github.com/go-kit/log/level"
"github.com/prometheus/client_golang/prometheus"
"github.com/yusufpapurcu/wmi"
)
// A ADCollector is a Prometheus collector for WMI Win32_PerfRawData_DirectoryServices_DirectoryServices metrics
type ADCollector struct {
logger log.Logger
AddressBookOperationsTotal *prometheus.Desc
AddressBookClientSessions *prometheus.Desc
ApproximateHighestDistinguishedNameTag *prometheus.Desc
AtqEstimatedDelaySeconds *prometheus.Desc
AtqOutstandingRequests *prometheus.Desc
AtqAverageRequestLatency *prometheus.Desc
AtqCurrentThreads *prometheus.Desc
SearchesTotal *prometheus.Desc
DatabaseOperationsTotal *prometheus.Desc
BindsTotal *prometheus.Desc
ReplicationHighestUsn *prometheus.Desc
IntersiteReplicationDataBytesTotal *prometheus.Desc
IntrasiteReplicationDataBytesTotal *prometheus.Desc
ReplicationInboundSyncObjectsRemaining *prometheus.Desc
ReplicationInboundLinkValueUpdatesRemaining *prometheus.Desc
ReplicationInboundObjectsUpdatedTotal *prometheus.Desc
ReplicationInboundObjectsFilteredTotal *prometheus.Desc
ReplicationInboundPropertiesUpdatedTotal *prometheus.Desc
ReplicationInboundPropertiesFilteredTotal *prometheus.Desc
ReplicationPendingOperations *prometheus.Desc
ReplicationPendingSynchronizations *prometheus.Desc
ReplicationSyncRequestsTotal *prometheus.Desc
ReplicationSyncRequestsSuccessTotal *prometheus.Desc
ReplicationSyncRequestsSchemaMismatchFailureTotal *prometheus.Desc
DirectoryOperationsTotal *prometheus.Desc
NameTranslationsTotal *prometheus.Desc
ChangeMonitorsRegistered *prometheus.Desc
ChangeMonitorUpdatesPending *prometheus.Desc
NameCacheHitsTotal *prometheus.Desc
NameCacheLookupsTotal *prometheus.Desc
DirectorySearchSuboperationsTotal *prometheus.Desc
SecurityDescriptorPropagationEventsTotal *prometheus.Desc
SecurityDescriptorPropagationEventsQueued *prometheus.Desc
SecurityDescriptorPropagationAccessWaitTotalSeconds *prometheus.Desc
SecurityDescriptorPropagationItemsQueuedTotal *prometheus.Desc
DirectoryServiceThreads *prometheus.Desc
LdapClosedConnectionsTotal *prometheus.Desc
LdapOpenedConnectionsTotal *prometheus.Desc
LdapActiveThreads *prometheus.Desc
LdapLastBindTimeSeconds *prometheus.Desc
LdapSearchesTotal *prometheus.Desc
LdapUdpOperationsTotal *prometheus.Desc
LdapWritesTotal *prometheus.Desc
LdapClientSessions *prometheus.Desc
LinkValuesCleanedTotal *prometheus.Desc
PhantomObjectsCleanedTotal *prometheus.Desc
PhantomObjectsVisitedTotal *prometheus.Desc
SamGroupMembershipEvaluationsTotal *prometheus.Desc
SamGroupMembershipGlobalCatalogEvaluationsTotal *prometheus.Desc
SamGroupMembershipEvaluationsNontransitiveTotal *prometheus.Desc
SamGroupMembershipEvaluationsTransitiveTotal *prometheus.Desc
SamGroupEvaluationLatency *prometheus.Desc
SamComputerCreationRequestsTotal *prometheus.Desc
SamComputerCreationSuccessfulRequestsTotal *prometheus.Desc
SamUserCreationRequestsTotal *prometheus.Desc
SamUserCreationSuccessfulRequestsTotal *prometheus.Desc
SamQueryDisplayRequestsTotal *prometheus.Desc
SamEnumerationsTotal *prometheus.Desc
SamMembershipChangesTotal *prometheus.Desc
SamPasswordChangesTotal *prometheus.Desc
TombstonedObjectsCollectedTotal *prometheus.Desc
TombstonedObjectsVisitedTotal *prometheus.Desc
}
// newADCollector ...
func newADCollector(logger log.Logger) (Collector, error) {
const subsystem = "ad"
return &ADCollector{
logger: log.With(logger, "collector", subsystem),
AddressBookOperationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "address_book_operations_total"),
"",
[]string{"operation"},
nil,
),
AddressBookClientSessions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "address_book_client_sessions"),
"",
nil,
nil,
),
ApproximateHighestDistinguishedNameTag: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "approximate_highest_distinguished_name_tag"),
"",
nil,
nil,
),
AtqEstimatedDelaySeconds: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "atq_estimated_delay_seconds"),
"",
nil,
nil,
),
AtqOutstandingRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "atq_outstanding_requests"),
"",
nil,
nil,
),
AtqAverageRequestLatency: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "atq_average_request_latency"),
"",
nil,
nil,
),
AtqCurrentThreads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "atq_current_threads"),
"",
[]string{"service"},
nil,
),
SearchesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "searches_total"),
"",
[]string{"scope"},
nil,
),
DatabaseOperationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "database_operations_total"),
"",
[]string{"operation"},
nil,
),
BindsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "binds_total"),
"",
[]string{"bind_method"},
nil,
),
ReplicationHighestUsn: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_highest_usn"),
"",
[]string{"state"},
nil,
),
IntrasiteReplicationDataBytesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_data_intrasite_bytes_total"),
"",
[]string{"direction"},
nil,
),
IntersiteReplicationDataBytesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_data_intersite_bytes_total"),
"",
[]string{"direction"},
nil,
),
ReplicationInboundSyncObjectsRemaining: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_inbound_sync_objects_remaining"),
"",
nil,
nil,
),
ReplicationInboundLinkValueUpdatesRemaining: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_inbound_link_value_updates_remaining"),
"",
nil,
nil,
),
ReplicationInboundObjectsUpdatedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_inbound_objects_updated_total"),
"",
nil,
nil,
),
ReplicationInboundObjectsFilteredTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_inbound_objects_filtered_total"),
"",
nil,
nil,
),
ReplicationInboundPropertiesUpdatedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_inbound_properties_updated_total"),
"",
nil,
nil,
),
ReplicationInboundPropertiesFilteredTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_inbound_properties_filtered_total"),
"",
nil,
nil,
),
ReplicationPendingOperations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_pending_operations"),
"",
nil,
nil,
),
ReplicationPendingSynchronizations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_pending_synchronizations"),
"",
nil,
nil,
),
ReplicationSyncRequestsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_sync_requests_total"),
"",
nil,
nil,
),
ReplicationSyncRequestsSuccessTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_sync_requests_success_total"),
"",
nil,
nil,
),
ReplicationSyncRequestsSchemaMismatchFailureTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "replication_sync_requests_schema_mismatch_failure_total"),
"",
nil,
nil,
),
NameTranslationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "name_translations_total"),
"",
[]string{"target_name"},
nil,
),
ChangeMonitorsRegistered: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "change_monitors_registered"),
"",
nil,
nil,
),
ChangeMonitorUpdatesPending: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "change_monitor_updates_pending"),
"",
nil,
nil,
),
NameCacheHitsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "name_cache_hits_total"),
"",
nil,
nil,
),
NameCacheLookupsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "name_cache_lookups_total"),
"",
nil,
nil,
),
DirectoryOperationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "directory_operations_total"),
"",
[]string{"operation", "origin"},
nil,
),
DirectorySearchSuboperationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "directory_search_suboperations_total"),
"",
nil,
nil,
),
SecurityDescriptorPropagationEventsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "security_descriptor_propagation_events_total"),
"",
nil,
nil,
),
SecurityDescriptorPropagationEventsQueued: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "security_descriptor_propagation_events_queued"),
"",
nil,
nil,
),
SecurityDescriptorPropagationAccessWaitTotalSeconds: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "security_descriptor_propagation_access_wait_total_seconds"),
"",
nil,
nil,
),
SecurityDescriptorPropagationItemsQueuedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "security_descriptor_propagation_items_queued_total"),
"",
nil,
nil,
),
DirectoryServiceThreads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "directory_service_threads"),
"",
nil,
nil,
),
LdapClosedConnectionsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_closed_connections_total"),
"",
nil,
nil,
),
LdapOpenedConnectionsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_opened_connections_total"),
"",
[]string{"type"},
nil,
),
LdapActiveThreads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_active_threads"),
"",
nil,
nil,
),
LdapLastBindTimeSeconds: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_last_bind_time_seconds"),
"",
nil,
nil,
),
LdapSearchesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_searches_total"),
"",
nil,
nil,
),
LdapUdpOperationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_udp_operations_total"),
"",
nil,
nil,
),
LdapWritesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "ldap_writes_total"),
"",
nil,
nil,
),
LdapClientSessions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "client_sessions"),
"This is the number of sessions opened by LDAP clients at the time the data is taken. This is helpful in determining LDAP client activity and if the DC is able to handle the load. Of course, spikes during normal periods of authentication — such as first thing in the morning — are not necessarily a problem, but long sustained periods of high values indicate an overworked DC.",
nil,
nil,
),
LinkValuesCleanedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "link_values_cleaned_total"),
"",
nil,
nil,
),
PhantomObjectsCleanedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "phantom_objects_cleaned_total"),
"",
nil,
nil,
),
PhantomObjectsVisitedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "phantom_objects_visited_total"),
"",
nil,
nil,
),
SamGroupMembershipEvaluationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_group_membership_evaluations_total"),
"",
[]string{"group_type"},
nil,
),
SamGroupMembershipGlobalCatalogEvaluationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_group_membership_global_catalog_evaluations_total"),
"",
nil,
nil,
),
SamGroupMembershipEvaluationsNontransitiveTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_group_membership_evaluations_nontransitive_total"),
"",
nil,
nil,
),
SamGroupMembershipEvaluationsTransitiveTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_group_membership_evaluations_transitive_total"),
"",
nil,
nil,
),
SamGroupEvaluationLatency: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_group_evaluation_latency"),
"The mean latency of the last 100 group evaluations performed for authentication",
[]string{"evaluation_type"},
nil,
),
SamComputerCreationRequestsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_computer_creation_requests_total"),
"",
nil,
nil,
),
SamComputerCreationSuccessfulRequestsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_computer_creation_successful_requests_total"),
"",
nil,
nil,
),
SamUserCreationRequestsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_user_creation_requests_total"),
"",
nil,
nil,
),
SamUserCreationSuccessfulRequestsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_user_creation_successful_requests_total"),
"",
nil,
nil,
),
SamQueryDisplayRequestsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_query_display_requests_total"),
"",
nil,
nil,
),
SamEnumerationsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_enumerations_total"),
"",
nil,
nil,
),
SamMembershipChangesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_membership_changes_total"),
"",
nil,
nil,
),
SamPasswordChangesTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sam_password_changes_total"),
"",
nil,
nil,
),
TombstonedObjectsCollectedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "tombstoned_objects_collected_total"),
"",
nil,
nil,
),
TombstonedObjectsVisitedTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "tombstoned_objects_visited_total"),
"",
nil,
nil,
),
}, nil
}
// Collect sends the metric values for each metric
// to the provided prometheus Metric channel.
func (c *ADCollector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
if desc, err := c.collect(ch); err != nil {
_ = level.Error(c.logger).Log("msg", "failed collecting ad metrics", "desc", desc, "err", err)
return err
}
return nil
}
// Win32_PerfRawData_DirectoryServices_DirectoryServices docs:
// - https://msdn.microsoft.com/en-us/library/ms803980.aspx
type Win32_PerfRawData_DirectoryServices_DirectoryServices struct {
Name string
ABANRPersec uint32
ABBrowsesPersec uint32
ABClientSessions uint32
ABMatchesPersec uint32
ABPropertyReadsPersec uint32
ABProxyLookupsPersec uint32
ABSearchesPersec uint32
ApproximatehighestDNT uint32
ATQEstimatedQueueDelay uint32
ATQOutstandingQueuedRequests uint32
ATQRequestLatency uint32
ATQThreadsLDAP uint32
ATQThreadsOther uint32
ATQThreadsTotal uint32
BasesearchesPersec uint32
DatabaseaddsPersec uint32
DatabasedeletesPersec uint32
DatabasemodifysPersec uint32
DatabaserecyclesPersec uint32
DigestBindsPersec uint32
DRAHighestUSNCommittedHighpart uint64
DRAHighestUSNCommittedLowpart uint64
DRAHighestUSNIssuedHighpart uint64
DRAHighestUSNIssuedLowpart uint64
DRAInboundBytesCompressedBetweenSitesAfterCompressionPersec uint32
DRAInboundBytesCompressedBetweenSitesAfterCompressionSinceBoot uint32
DRAInboundBytesCompressedBetweenSitesBeforeCompressionPersec uint32
DRAInboundBytesCompressedBetweenSitesBeforeCompressionSinceBoot uint32
DRAInboundBytesNotCompressedWithinSitePersec uint32
DRAInboundBytesNotCompressedWithinSiteSinceBoot uint32
DRAInboundBytesTotalPersec uint32
DRAInboundBytesTotalSinceBoot uint32
DRAInboundFullSyncObjectsRemaining uint32
DRAInboundLinkValueUpdatesRemaininginPacket uint32
DRAInboundObjectsAppliedPersec uint32
DRAInboundObjectsFilteredPersec uint32
DRAInboundObjectsPersec uint32
DRAInboundObjectUpdatesRemaininginPacket uint32
DRAInboundPropertiesAppliedPersec uint32
DRAInboundPropertiesFilteredPersec uint32
DRAInboundPropertiesTotalPersec uint32
DRAInboundTotalUpdatesRemaininginPacket uint32
DRAInboundValuesDNsonlyPersec uint32
DRAInboundValuesTotalPersec uint32
DRAOutboundBytesCompressedBetweenSitesAfterCompressionPersec uint32
DRAOutboundBytesCompressedBetweenSitesAfterCompressionSinceBoot uint32
DRAOutboundBytesCompressedBetweenSitesBeforeCompressionPersec uint32
DRAOutboundBytesCompressedBetweenSitesBeforeCompressionSinceBoot uint32
DRAOutboundBytesNotCompressedWithinSitePersec uint32
DRAOutboundBytesNotCompressedWithinSiteSinceBoot uint32
DRAOutboundBytesTotalPersec uint32
DRAOutboundBytesTotalSinceBoot uint32
DRAOutboundObjectsFilteredPersec uint32
DRAOutboundObjectsPersec uint32
DRAOutboundPropertiesPersec uint32
DRAOutboundValuesDNsonlyPersec uint32
DRAOutboundValuesTotalPersec uint32
DRAPendingReplicationOperations uint32
DRAPendingReplicationSynchronizations uint32
DRASyncFailuresonSchemaMismatch uint32
DRASyncRequestsMade uint32
DRASyncRequestsSuccessful uint32
DRAThreadsGettingNCChanges uint32
DRAThreadsGettingNCChangesHoldingSemaphore uint32
DSClientBindsPersec uint32
DSClientNameTranslationsPersec uint32
DSDirectoryReadsPersec uint32
DSDirectorySearchesPersec uint32
DSDirectoryWritesPersec uint32
DSMonitorListSize uint32
DSNameCachehitrate uint32
DSNameCachehitrate_Base uint32
DSNotifyQueueSize uint32
DSPercentReadsfromDRA uint32
DSPercentReadsfromKCC uint32
DSPercentReadsfromLSA uint32
DSPercentReadsfromNSPI uint32
DSPercentReadsfromNTDSAPI uint32
DSPercentReadsfromSAM uint32
DSPercentReadsOther uint32
DSPercentSearchesfromDRA uint32
DSPercentSearchesfromKCC uint32
DSPercentSearchesfromLDAP uint32
DSPercentSearchesfromLSA uint32
DSPercentSearchesfromNSPI uint32
DSPercentSearchesfromNTDSAPI uint32
DSPercentSearchesfromSAM uint32
DSPercentSearchesOther uint32
DSPercentWritesfromDRA uint32
DSPercentWritesfromKCC uint32
DSPercentWritesfromLDAP uint32
DSPercentWritesfromLSA uint32
DSPercentWritesfromNSPI uint32
DSPercentWritesfromNTDSAPI uint32
DSPercentWritesfromSAM uint32
DSPercentWritesOther uint32
DSSearchsuboperationsPersec uint32
DSSecurityDescriptorPropagationsEvents uint32
DSSecurityDescriptorPropagatorAverageExclusionTime uint32
DSSecurityDescriptorPropagatorRuntimeQueue uint32
DSSecurityDescriptorsuboperationsPersec uint32
DSServerBindsPersec uint32
DSServerNameTranslationsPersec uint32
DSThreadsinUse uint32
ExternalBindsPersec uint32
FastBindsPersec uint32
LDAPActiveThreads uint32
LDAPBindTime uint32
LDAPClientSessions uint32
LDAPClosedConnectionsPersec uint32
LDAPNewConnectionsPersec uint32
LDAPNewSSLConnectionsPersec uint32
LDAPSearchesPersec uint32
LDAPSuccessfulBindsPersec uint32
LDAPUDPoperationsPersec uint32
LDAPWritesPersec uint32
LinkValuesCleanedPersec uint32
NegotiatedBindsPersec uint32
NTLMBindsPersec uint32
OnelevelsearchesPersec uint32
PhantomsCleanedPersec uint32
PhantomsVisitedPersec uint32
SAMAccountGroupEvaluationLatency uint32
SAMDisplayInformationQueriesPersec uint32
SAMDomainLocalGroupMembershipEvaluationsPersec uint32
SAMEnumerationsPersec uint32
SAMGCEvaluationsPersec uint32
SAMGlobalGroupMembershipEvaluationsPersec uint32
SAMMachineCreationAttemptsPersec uint32
SAMMembershipChangesPersec uint32
SAMNonTransitiveMembershipEvaluationsPersec uint32
SAMPasswordChangesPersec uint32
SAMResourceGroupEvaluationLatency uint32
SAMSuccessfulComputerCreationsPersecIncludesallrequests uint32
SAMSuccessfulUserCreationsPersec uint32
SAMTransitiveMembershipEvaluationsPersec uint32
SAMUniversalGroupMembershipEvaluationsPersec uint32
SAMUserCreationAttemptsPersec uint32
SimpleBindsPersec uint32
SubtreesearchesPersec uint32
TombstonesGarbageCollectedPersec uint32
TombstonesVisitedPersec uint32
Transitiveoperationsmillisecondsrun uint32
TransitiveoperationsPersec uint32
TransitivesuboperationsPersec uint32
}
func (c *ADCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
var dst []Win32_PerfRawData_DirectoryServices_DirectoryServices
q := queryAll(&dst, c.logger)
if err := wmi.Query(q, &dst); err != nil {
return nil, err
}
if len(dst) == 0 {
return nil, errors.New("WMI query returned empty result set")
}
ch <- prometheus.MustNewConstMetric(
c.AddressBookOperationsTotal,
prometheus.CounterValue,
float64(dst[0].ABANRPersec),
"ambiguous_name_resolution",
)
ch <- prometheus.MustNewConstMetric(
c.AddressBookOperationsTotal,
prometheus.CounterValue,
float64(dst[0].ABBrowsesPersec),
"browse",
)
ch <- prometheus.MustNewConstMetric(
c.AddressBookOperationsTotal,
prometheus.CounterValue,
float64(dst[0].ABMatchesPersec),
"find",
)
ch <- prometheus.MustNewConstMetric(
c.AddressBookOperationsTotal,
prometheus.CounterValue,
float64(dst[0].ABPropertyReadsPersec),
"property_read",
)
ch <- prometheus.MustNewConstMetric(
c.AddressBookOperationsTotal,
prometheus.CounterValue,
float64(dst[0].ABSearchesPersec),
"search",
)
ch <- prometheus.MustNewConstMetric(
c.AddressBookOperationsTotal,
prometheus.CounterValue,
float64(dst[0].ABProxyLookupsPersec),
"proxy_search",
)
ch <- prometheus.MustNewConstMetric(
c.AddressBookClientSessions,
prometheus.GaugeValue,
float64(dst[0].ABClientSessions),
)
ch <- prometheus.MustNewConstMetric(
c.ApproximateHighestDistinguishedNameTag,
prometheus.GaugeValue,
float64(dst[0].ApproximatehighestDNT),
)
ch <- prometheus.MustNewConstMetric(
c.AtqEstimatedDelaySeconds,
prometheus.GaugeValue,
float64(dst[0].ATQEstimatedQueueDelay)/1000,
)
ch <- prometheus.MustNewConstMetric(
c.AtqOutstandingRequests,
prometheus.GaugeValue,
float64(dst[0].ATQOutstandingQueuedRequests),
)
ch <- prometheus.MustNewConstMetric(
c.AtqAverageRequestLatency,
prometheus.GaugeValue,
float64(dst[0].ATQRequestLatency),
)
ch <- prometheus.MustNewConstMetric(
c.AtqCurrentThreads,
prometheus.GaugeValue,
float64(dst[0].ATQThreadsLDAP),
"ldap",
)
ch <- prometheus.MustNewConstMetric(
c.AtqCurrentThreads,
prometheus.GaugeValue,
float64(dst[0].ATQThreadsOther),
"other",
)
ch <- prometheus.MustNewConstMetric(
c.SearchesTotal,
prometheus.CounterValue,
float64(dst[0].BasesearchesPersec),
"base",
)
ch <- prometheus.MustNewConstMetric(
c.SearchesTotal,
prometheus.CounterValue,
float64(dst[0].SubtreesearchesPersec),
"subtree",
)
ch <- prometheus.MustNewConstMetric(
c.SearchesTotal,
prometheus.CounterValue,
float64(dst[0].OnelevelsearchesPersec),
"one_level",
)
ch <- prometheus.MustNewConstMetric(
c.DatabaseOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DatabaseaddsPersec),
"add",
)
ch <- prometheus.MustNewConstMetric(
c.DatabaseOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DatabasedeletesPersec),
"delete",
)
ch <- prometheus.MustNewConstMetric(
c.DatabaseOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DatabasemodifysPersec),
"modify",
)
ch <- prometheus.MustNewConstMetric(
c.DatabaseOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DatabaserecyclesPersec),
"recycle",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].DigestBindsPersec),
"digest",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].DSClientBindsPersec),
"ds_client",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].DSServerBindsPersec),
"ds_server",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].ExternalBindsPersec),
"external",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].FastBindsPersec),
"fast",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].NegotiatedBindsPersec),
"negotiate",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].NTLMBindsPersec),
"ntlm",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].SimpleBindsPersec),
"simple",
)
ch <- prometheus.MustNewConstMetric(
c.BindsTotal,
prometheus.CounterValue,
float64(dst[0].LDAPSuccessfulBindsPersec),
"ldap",
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationHighestUsn,
prometheus.CounterValue,
float64(dst[0].DRAHighestUSNCommittedHighpart<<32)+float64(dst[0].DRAHighestUSNCommittedLowpart),
"committed",
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationHighestUsn,
prometheus.CounterValue,
float64(dst[0].DRAHighestUSNIssuedHighpart<<32)+float64(dst[0].DRAHighestUSNIssuedLowpart),
"issued",
)
ch <- prometheus.MustNewConstMetric(
c.IntersiteReplicationDataBytesTotal,
prometheus.CounterValue,
float64(dst[0].DRAInboundBytesCompressedBetweenSitesAfterCompressionPersec),
"inbound",
)
// The pre-compression data size seems to have little value? Skipping for now
// ch <- prometheus.MustNewConstMetric(
// c.IntersiteReplicationDataBytesTotal,
// prometheus.CounterValue,
// float64(dst[0].DRAInboundBytesCompressedBetweenSitesBeforeCompressionPersec),
// "inbound",
// )
ch <- prometheus.MustNewConstMetric(
c.IntersiteReplicationDataBytesTotal,
prometheus.CounterValue,
float64(dst[0].DRAOutboundBytesCompressedBetweenSitesAfterCompressionPersec),
"outbound",
)
// ch <- prometheus.MustNewConstMetric(
// c.IntersiteReplicationDataBytesTotal,
// prometheus.CounterValue,
// float64(dst[0].DRAOutboundBytesCompressedBetweenSitesBeforeCompressionPersec),
// "outbound",
// )
ch <- prometheus.MustNewConstMetric(
c.IntrasiteReplicationDataBytesTotal,
prometheus.CounterValue,
float64(dst[0].DRAInboundBytesNotCompressedWithinSitePersec),
"inbound",
)
ch <- prometheus.MustNewConstMetric(
c.IntrasiteReplicationDataBytesTotal,
prometheus.CounterValue,
float64(dst[0].DRAOutboundBytesNotCompressedWithinSitePersec),
"outbound",
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationInboundSyncObjectsRemaining,
prometheus.GaugeValue,
float64(dst[0].DRAInboundFullSyncObjectsRemaining),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationInboundLinkValueUpdatesRemaining,
prometheus.GaugeValue,
float64(dst[0].DRAInboundLinkValueUpdatesRemaininginPacket),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationInboundObjectsUpdatedTotal,
prometheus.CounterValue,
float64(dst[0].DRAInboundObjectsAppliedPersec),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationInboundObjectsFilteredTotal,
prometheus.CounterValue,
float64(dst[0].DRAInboundObjectsFilteredPersec),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationInboundPropertiesUpdatedTotal,
prometheus.CounterValue,
float64(dst[0].DRAInboundPropertiesAppliedPersec),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationInboundPropertiesFilteredTotal,
prometheus.CounterValue,
float64(dst[0].DRAInboundPropertiesFilteredPersec),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationPendingOperations,
prometheus.GaugeValue,
float64(dst[0].DRAPendingReplicationOperations),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationPendingSynchronizations,
prometheus.GaugeValue,
float64(dst[0].DRAPendingReplicationSynchronizations),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationSyncRequestsTotal,
prometheus.CounterValue,
float64(dst[0].DRASyncRequestsMade),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationSyncRequestsSuccessTotal,
prometheus.CounterValue,
float64(dst[0].DRASyncRequestsSuccessful),
)
ch <- prometheus.MustNewConstMetric(
c.ReplicationSyncRequestsSchemaMismatchFailureTotal,
prometheus.CounterValue,
float64(dst[0].DRASyncFailuresonSchemaMismatch),
)
ch <- prometheus.MustNewConstMetric(
c.NameTranslationsTotal,
prometheus.CounterValue,
float64(dst[0].DSClientNameTranslationsPersec),
"client",
)
ch <- prometheus.MustNewConstMetric(
c.NameTranslationsTotal,
prometheus.CounterValue,
float64(dst[0].DSServerNameTranslationsPersec),
"server",
)
ch <- prometheus.MustNewConstMetric(
c.ChangeMonitorsRegistered,
prometheus.GaugeValue,
float64(dst[0].DSMonitorListSize),
)
ch <- prometheus.MustNewConstMetric(
c.ChangeMonitorUpdatesPending,
prometheus.GaugeValue,
float64(dst[0].DSNotifyQueueSize),
)
ch <- prometheus.MustNewConstMetric(
c.NameCacheHitsTotal,
prometheus.CounterValue,
float64(dst[0].DSNameCachehitrate),
)
ch <- prometheus.MustNewConstMetric(
c.NameCacheLookupsTotal,
prometheus.CounterValue,
float64(dst[0].DSNameCachehitrate_Base),
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsfromDRA),
"read",
"replication_agent",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsfromKCC),
"read",
"knowledge_consistency_checker",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsfromLSA),
"read",
"local_security_authority",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsfromNSPI),
"read",
"name_service_provider_interface",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsfromNTDSAPI),
"read",
"directory_service_api",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsfromSAM),
"read",
"security_account_manager",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentReadsOther),
"read",
"other",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromDRA),
"search",
"replication_agent",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromKCC),
"search",
"knowledge_consistency_checker",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromLDAP),
"search",
"ldap",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromLSA),
"search",
"local_security_authority",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromNSPI),
"search",
"name_service_provider_interface",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromNTDSAPI),
"search",
"directory_service_api",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesfromSAM),
"search",
"security_account_manager",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentSearchesOther),
"search",
"other",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromDRA),
"write",
"replication_agent",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromKCC),
"write",
"knowledge_consistency_checker",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromLDAP),
"write",
"ldap",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromLSA),
"write",
"local_security_authority",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromNSPI),
"write",
"name_service_provider_interface",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromNTDSAPI),
"write",
"directory_service_api",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesfromSAM),
"write",
"security_account_manager",
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryOperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSPercentWritesOther),
"write",
"other",
)
ch <- prometheus.MustNewConstMetric(
c.DirectorySearchSuboperationsTotal,
prometheus.CounterValue,
float64(dst[0].DSSearchsuboperationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SecurityDescriptorPropagationEventsTotal,
prometheus.CounterValue,
float64(dst[0].DSSecurityDescriptorsuboperationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SecurityDescriptorPropagationEventsQueued,
prometheus.GaugeValue,
float64(dst[0].DSSecurityDescriptorPropagationsEvents),
)
ch <- prometheus.MustNewConstMetric(
c.SecurityDescriptorPropagationAccessWaitTotalSeconds,
prometheus.GaugeValue,
float64(dst[0].DSSecurityDescriptorPropagatorAverageExclusionTime),
)
ch <- prometheus.MustNewConstMetric(
c.SecurityDescriptorPropagationItemsQueuedTotal,
prometheus.CounterValue,
float64(dst[0].DSSecurityDescriptorPropagatorRuntimeQueue),
)
ch <- prometheus.MustNewConstMetric(
c.DirectoryServiceThreads,
prometheus.GaugeValue,
float64(dst[0].DSThreadsinUse),
)
ch <- prometheus.MustNewConstMetric(
c.LdapClosedConnectionsTotal,
prometheus.CounterValue,
float64(dst[0].LDAPClosedConnectionsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.LdapOpenedConnectionsTotal,
prometheus.CounterValue,
float64(dst[0].LDAPNewConnectionsPersec),
"ldap",
)
ch <- prometheus.MustNewConstMetric(
c.LdapOpenedConnectionsTotal,
prometheus.CounterValue,
float64(dst[0].LDAPNewSSLConnectionsPersec),
"ldaps",
)
ch <- prometheus.MustNewConstMetric(
c.LdapActiveThreads,
prometheus.GaugeValue,
float64(dst[0].LDAPActiveThreads),
)
ch <- prometheus.MustNewConstMetric(
c.LdapLastBindTimeSeconds,
prometheus.GaugeValue,
float64(dst[0].LDAPBindTime)/1000,
)
ch <- prometheus.MustNewConstMetric(
c.LdapSearchesTotal,
prometheus.CounterValue,
float64(dst[0].LDAPSearchesPersec),
)
ch <- prometheus.MustNewConstMetric(
c.LdapUdpOperationsTotal,
prometheus.CounterValue,
float64(dst[0].LDAPUDPoperationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.LdapWritesTotal,
prometheus.CounterValue,
float64(dst[0].LDAPWritesPersec),
)
ch <- prometheus.MustNewConstMetric(
c.LdapClientSessions,
prometheus.GaugeValue,
float64(dst[0].LDAPClientSessions),
)
ch <- prometheus.MustNewConstMetric(
c.LinkValuesCleanedTotal,
prometheus.CounterValue,
float64(dst[0].LinkValuesCleanedPersec),
)
ch <- prometheus.MustNewConstMetric(
c.PhantomObjectsCleanedTotal,
prometheus.CounterValue,
float64(dst[0].PhantomsCleanedPersec),
)
ch <- prometheus.MustNewConstMetric(
c.PhantomObjectsVisitedTotal,
prometheus.CounterValue,
float64(dst[0].PhantomsVisitedPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupMembershipEvaluationsTotal,
prometheus.CounterValue,
float64(dst[0].SAMGlobalGroupMembershipEvaluationsPersec),
"global",
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupMembershipEvaluationsTotal,
prometheus.CounterValue,
float64(dst[0].SAMDomainLocalGroupMembershipEvaluationsPersec),
"domain_local",
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupMembershipEvaluationsTotal,
prometheus.CounterValue,
float64(dst[0].SAMUniversalGroupMembershipEvaluationsPersec),
"universal",
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupMembershipGlobalCatalogEvaluationsTotal,
prometheus.CounterValue,
float64(dst[0].SAMGCEvaluationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupMembershipEvaluationsNontransitiveTotal,
prometheus.CounterValue,
float64(dst[0].SAMNonTransitiveMembershipEvaluationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupMembershipEvaluationsTransitiveTotal,
prometheus.CounterValue,
float64(dst[0].SAMTransitiveMembershipEvaluationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupEvaluationLatency,
prometheus.GaugeValue,
float64(dst[0].SAMAccountGroupEvaluationLatency),
"account_group",
)
ch <- prometheus.MustNewConstMetric(
c.SamGroupEvaluationLatency,
prometheus.GaugeValue,
float64(dst[0].SAMResourceGroupEvaluationLatency),
"resource_group",
)
ch <- prometheus.MustNewConstMetric(
c.SamComputerCreationRequestsTotal,
prometheus.CounterValue,
float64(dst[0].SAMSuccessfulComputerCreationsPersecIncludesallrequests),
)
ch <- prometheus.MustNewConstMetric(
c.SamComputerCreationSuccessfulRequestsTotal,
prometheus.CounterValue,
float64(dst[0].SAMMachineCreationAttemptsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamUserCreationRequestsTotal,
prometheus.CounterValue,
float64(dst[0].SAMUserCreationAttemptsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamUserCreationSuccessfulRequestsTotal,
prometheus.CounterValue,
float64(dst[0].SAMSuccessfulUserCreationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamQueryDisplayRequestsTotal,
prometheus.CounterValue,
float64(dst[0].SAMDisplayInformationQueriesPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamEnumerationsTotal,
prometheus.CounterValue,
float64(dst[0].SAMEnumerationsPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamMembershipChangesTotal,
prometheus.CounterValue,
float64(dst[0].SAMMembershipChangesPersec),
)
ch <- prometheus.MustNewConstMetric(
c.SamPasswordChangesTotal,
prometheus.CounterValue,
float64(dst[0].SAMPasswordChangesPersec),
)
ch <- prometheus.MustNewConstMetric(
c.TombstonedObjectsCollectedTotal,
prometheus.CounterValue,
float64(dst[0].TombstonesGarbageCollectedPersec),
)
ch <- prometheus.MustNewConstMetric(
c.TombstonedObjectsVisitedTotal,
prometheus.CounterValue,
float64(dst[0].TombstonesVisitedPersec),
)
return nil, nil
}