Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(inputs.mysql): Add support for replica status #15749

Merged
merged 4 commits into from
Aug 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion plugins/inputs/mysql/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,11 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
## gather metrics from SHOW SLAVE STATUS command output
# gather_slave_status = false

## gather metrics from SHOW REPLICA STATUS command output
# gather_replica_status = false

## use SHOW ALL SLAVES STATUS command output for MariaDB
## use SHOW ALL REPLICAS STATUS command if enable gather replica status
# mariadb_dialect = false

## gather metrics from SHOW BINARY LOGS command output
Expand Down Expand Up @@ -260,7 +264,8 @@ the single-source replication is on. If the multi-source replication is set,
then everything works differently, this metric does not work with multi-source
replication, unless you set `gather_all_slave_channels = true`. For MariaDB,
`mariadb_dialect = true` should be set to address the field names and commands
differences.
differences. If enable `gather_replica_status` metrics gather from command
`SHOW REPLICA STATUS`, for MariaDB will be `SHOW ALL REPLICAS STATUS`
* slave_[column name]
* Binary logs - all metrics including size and count of all binary files.
Requires to be turned on in configuration.
Expand Down
15 changes: 11 additions & 4 deletions plugins/inputs/mysql/mysql.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ type Mysql struct {
GatherInfoSchemaAutoInc bool `toml:"gather_info_schema_auto_inc"`
GatherInnoDBMetrics bool `toml:"gather_innodb_metrics"`
GatherSlaveStatus bool `toml:"gather_slave_status"`
GatherReplicaStatus bool `toml:"gather_replica_status"`
GatherAllSlaveChannels bool `toml:"gather_all_slave_channels"`
MariadbDialect bool `toml:"mariadb_dialect"`
GatherBinaryLogs bool `toml:"gather_binary_logs"`
Expand Down Expand Up @@ -77,12 +78,16 @@ func (*Mysql) SampleConfig() string {
}

func (m *Mysql) Init() error {
if m.MariadbDialect {
switch {
case m.MariadbDialect && m.GatherReplicaStatus:
m.getStatusQuery = replicaStatusQueryMariadb
case m.MariadbDialect:
m.getStatusQuery = slaveStatusQueryMariadb
} else {
case m.GatherReplicaStatus:
m.getStatusQuery = replicaStatusQuery
default:
m.getStatusQuery = slaveStatusQuery
}

// Default to localhost if nothing specified.
if len(m.Servers) == 0 {
s := config.NewSecret([]byte(localhost))
Expand Down Expand Up @@ -250,7 +255,9 @@ const (
globalStatusQuery = `SHOW GLOBAL STATUS`
globalVariablesQuery = `SHOW GLOBAL VARIABLES`
slaveStatusQuery = `SHOW SLAVE STATUS`
replicaStatusQuery = `SHOW REPLICA STATUS`
slaveStatusQueryMariadb = `SHOW ALL SLAVES STATUS`
replicaStatusQueryMariadb = `SHOW ALL REPLICAS STATUS`
binaryLogsQuery = `SHOW BINARY LOGS`
infoSchemaProcessListQuery = `
SELECT COALESCE(command,''),COALESCE(state,''),count(*)
Expand Down Expand Up @@ -475,7 +482,7 @@ func (m *Mysql) gatherServer(server *config.Secret, acc telegraf.Accumulator) er
}
}

if m.GatherSlaveStatus {
if m.GatherSlaveStatus || m.GatherReplicaStatus {
err = m.gatherSlaveStatuses(db, servtag, acc)
if err != nil {
return err
Expand Down
4 changes: 4 additions & 0 deletions plugins/inputs/mysql/sample.conf
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@
## gather metrics from SHOW SLAVE STATUS command output
# gather_slave_status = false

## gather metrics from SHOW REPLICA STATUS command output
# gather_replica_status = false

## use SHOW ALL SLAVES STATUS command output for MariaDB
## use SHOW ALL REPLICAS STATUS command if enable gather replica status
# mariadb_dialect = false

## gather metrics from SHOW BINARY LOGS command output
Expand Down
Loading