以下、具体的なLogstashの設定です。
/etc/logstash/conf.d/配下には、(A-1)(A-2)のファイル以外には存在していません。
(A)MySQLに対してSHOW GLOBAL STATUSを実行した結果をログファイルに出力、Logstash経由でelasticsearchへ
mysql -h ホスト名 -u ユーザー名 -pパスワード -e "SHOW GLOBAL STATUS;" | sed -e 's/\t/\" \"/g' | sed -e 's/^/\"/g' | sed -e 's/$/\"/g' | sed -e "s/^/$(date '+%Y\/%m\/%d %H:%M:%S') /g" >> 出力先ファイル
(B)MySQLに対してSHOW FULL PROCESSLISTを実行した結果をログファイルに出力、Logstash経由でelasticsearchへ
mysql -h ホスト名 -u ユーザー名 -pパスワード -e "SHOW FULL PROCESSLIST;" | sed -e 's/\t/\" \"/g' | sed -e 's/^/\"/g' | sed -e 's/$/\"/g' | sed -e "s/^/$(date '+%Y\/%m\/%d %H:%M:%S') /g" >> 出力先ファイル
* 文字数がこちらの入力上限に達したようなので、(B)の分は別レスにて張り付けます。
(A-1)Logstashの設定
/usr/share/logstash/conf.d/mysql_global_status.conf
input {
file {
path => "/var/log/mysql_monitor/show_global_status.log"
start_position => "beginning"
type => "mysql-status"
}
}
filter {
grok {
match => { "message" => '%{DATESTAMP:date} "%{DATA:Variable_name}" "%{INT:Variable_value}"' }
}
}
output {
if [type] == "mysql-status" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "lgs-mysql-status-%{+YYYY.MM.dd}"
manage_template => false
template_name => "lgs-mysql-status"
}
}
# stdout { codec => rubydebug }
}
(A-2)Mapping設定に使用したコマンド
PUT _template/mysql-status
{
"template": "lgs-mysql-status-*",
"mappings": {
"mysql-status": {
"date_detection": false,
"properties": {
"@timestamp": {
"type": "date"
},
"Variable_name": {
"type": "text"
},
"Variable_value": {
"type": "long"
}
}
}
}
}
(A-3)Mappingの確認結果・・・Variable_name、Variable_value以外の項目はLogstashのデフォルト?
GET lgs-mysql-status-2017.07.24/_mappings
{
"lgs-mysql-status-2017.07.24": {
"mappings": {
"mysql-status": {
"date_detection": false,
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Variable_name": {
"type": "text"
},
"Variable_value": {
"type": "long"
},
"date": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"host": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"message": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"path": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"tags": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}