File: //etc/opt/microsoft/omsagent/sysconf/omsagent.d/mysql_logs.conf
# MySQL General Log
<source>
type tail
tag oms.api.MySQL.General.logs
format /^((?<Timestamp>[\d\-]{4,10}\s{0,4}\d{0,2}:\d{0,2}:\d{0,2}|[\d\-T:\.Z]{20,30})|\s{0,10})\s+(?<Id>\d+)\s+(?<Command>\w+)\s+(?<Arguments>\z|.+)$/
path /var/log/mysql/mysql.log
pos_file /var/opt/microsoft/omsagent/state/var_log_mysql_log.pos
</source>
# MySQL Error Log
<source>
type tail
tag oms.api.MySQL.Error.logs
format /^(?<Timestamp>[\d\-]{4,10}\s{0,4}\d{0,2}:\d{0,2}:\d{0,2}|[\d\-T:\.Z]{20,30})\s{0,4}(?<Id>\d+)?\s{0,4}(\[(?<Command>[A-Za-z]+)\])?\s+(?<Arguments>.*)$/
path /var/log/mysql/error.log
pos_file /var/opt/microsoft/omsagent/state/var_log_mysql_error_log.pos
</source>
# MySQL Slow Query Log
<source>
type tail
tag oms.api.MySQL.SlowQuery.logs
format multiline
format_firstline /^\s{0,2}\#\s{0,2}User@Host/
format1 /^\s{0,2}\#\s{0,2}User@Host: +(?<UserHost>.+\])\s*(Id\:\s*(?<Id>\d+))?\n/
format2 /^\#\s{0,4}Query_time\:\s{0,4}(?<QueryTime>[\-\+]?[\.\d]*)\s{0,4}Lock_time\:\s{0,4}(?<LockTime>[\-\+]?[\.\d]*)\s{0,4}Rows_sent\:\s{0,4}(?<RowsSent>\d*)\s{0,4}Rows_examined\:\s{0,4}(?<RowsExamined>\d*)[^;]*(\;)?\n/
format3 /^\s{0,4}SET\s{0,4}timestamp\=(?<Timestamp>\d*)\;\s{0,4}\n/
format4 /^(?<Query>[^;]*;)/
multiline_flush_interval 4s
path /var/log/mysql/mysql-slow.log
pos_file /var/opt/microsoft/omsagent/state/var_log_mysql_slow_log.pos
types QueryTime:float,LockTime:float,RowsSent:integer,RowsExamined:integer
</source>
# Filter Plugins
# All MySQL Logs
<filter oms.api.MySQL.**>
type record_transformer
enable_ruby
<record>
ResourceName MySQL
ResourceType ${tag.split('.')[3]}
Computer ${OMS::Common.get_hostname}
ResourceId ${OMS::Common.get_hostname}
</record>
</filter>
# General Logs
<filter oms.api.MySQL.General.logs>
type record_transformer
enable_ruby
<record>
Timestamp ${DateTime.parse(record["Timestamp"]).strftime("%FT%H:%M:%S.%3NZ") if record["Timestamp"]}
</record>
</filter>
# Slow Query Logs
<filter oms.api.MySQL.SlowQuery.logs>
type record_transformer
enable_ruby
<record>
Timestamp ${OMS::Common.format_time(record["Timestamp"].to_i)}
</record>
</filter>
#Error Logs
<filter oms.api.MySQL.Error.logs>
type record_transformer
enable_ruby
<record>
Timestamp ${DateTime.parse(record["Timestamp"]).strftime("%FT%H:%M:%S.%3NZ")}
</record>
</filter>
# Output Plugin
<match oms.api.MySQL.**>
type out_oms_api
log_level info
run_in_background false
buffer_chunk_limit 5m
buffer_type file
buffer_path /var/opt/microsoft/omsagent/state/out_oms_api_mysql_logs*.buffer
buffer_queue_limit 10
flush_interval 20s
retry_limit 6
retry_wait 30s
max_retry_wait 30m
</match>