在安装了Kibana4后,试图将RDS的慢查询转化为图形化
-
- 2015/05/20 にShibuya.rbで話した資料です
- 弊社はAnsibleを使っているのでプロビジョニングコードはAnsibleになっています。
在安装Kibana4之前…
由于 Elasticsearch 的版本过旧,所以进行了升级。
要安装 Kibana4 需要1.4版本或更高。当前最新版本是1.5,因此进行了升级至1.5。
- name: Ensure Elasticsearch 1.5 repository is installed
sudo: yes
apt_repository: repo="deb http://packages.elasticsearch.org/elasticsearch/1.5/debian stable main" state=present update_cache=yes
- name: Ensure elasticsearch is installed
sudo: yes
apt: pkg={{item}} state=latest
with_items:
- openjdk-7-jre
- elasticsearch
2. 安装 Kibana4
- name: 'KibanaのDownload'
get_url: url=https://download.elasticsearch.org/kibana/kibana/kibana-4.0.2-linux-x64.tar.gz dest=/home/ubuntu
sudo_user: ubuntu
- name: ディレクトリを作成
file: path=/var/www/kibana4 state=directory owner=ubuntu group=ubuntu mode=0755
- name: 'Kibanaの解凍'
unarchive: src=/home/ubuntu/kibana-4.0.2-linux-x64.tar.gz dest=/var/www/kibana4 copy=no
sudo_user: ubuntu
#- name: 'Kibanaを起動'
# command: 'nohup /var/www/kibana4/kibana-4.0.2-linux-x64/bin/kibana &'
-
- パッケージ登録などはされていないので、Elasticsearchのサイトからダウンロードしてきて解凍/配置
- 起動は supervisor 等を使う必要がありそうで、今のところ手動起動してる
参考网站
- Kibanaを3から4にしてみた – まっしろけっけ http://shiro-16.hatenablog.com/entry/2015/03/14/234023
3. nginx的配置
由于Kibana4似乎已经回到了服务器应用程序中,所以即使不经过反向代理也可以访问,但由于在安装Kibana3时已经安装了它,因此可以直接重复使用。
+upstream kibana {
+ server 127.0.0.1:5601;
+}
location / {
- root /home/www/kibana-3.1.1;
- index index.html index.htm;
+ proxy_pass http://kibana;
}
在这个阶段,您将能够使用Kibana 4。
在从Fluentd发送到Elasticsearch之前需要完成的任务。
当你在Elasticsearch中输入一个字符串时,它能自动分析并按照空格、’/’等分隔符来分割单词。这是一个非常方便的功能,使得全文搜索可以在不设置特别条件的情况下进行。然而,当试图在整个字符串中存储和聚合类似SQL或URL的具有意义的内容时,这个功能就成为制约因素了。

- slow queryを集計し上位10位を出すと、
- 从 “messages(表名)” 表中选择计算 id(列名)的数量。
可能会变成这样。真是悲哀。
为了避免被分析,创建模板。
通过在Elasticsearch中设置预先不分析此类型此字段的方式,可以避免发生这种情况。使用multi_field功能,通常会保留分析和不分析两种情况。
这样应对就可以了。
{
"template": "logstash-*",
"mappings": {
"slowlog": {
"properties": {
"sql_text": {
"type": "multi_field",
"fields": {
"sql_text": {"type": "string"},
"full": {"type": "string", "index": "not_analyzed"}
}
}
}
}
}
}
- name: elasticsearchのformat変換
shell: curl -XPUT http://localhost:9200/_template/logstash_template \
-d '{{ lookup("file", "es_template.json") }}'
我参考过的网站
- Kibana+Elasticsearchで文字列の完全一致と部分一致検索の両方を実現する – Qiita http://qiita.com/harukasan/items/4ec517d8d96f557367e1
将 RDS 的慢查询通过 Fluentd 发送
使用了 fluent-plugin-sql。
流畅/fluent-plugin-sql https://github.com/fluent/fluent-plugin-sql
将其设置如下
<source>
type sql
host {rds_host}
database mysql
adapter mysql2
username ***
password ***
tag_prefix rds.mysql
select_interval 60s
select_limit 500
state_file /var/log/td-agent/slowquery_sql_state
<table>
table slow_log
tag slow_log
update_column start_time
time_column start_time
</table>
</source>
将来自fluentd的慢查询发送到Elasticsearch。
使用了 fluent-plugin-elasticsearch。
uken/fluent-plugin-elasticsearch可以在https://github.com/uken/fluent-plugin-elasticsearch找到。
设定如下
<match rds.mysql.*>
type elasticsearch
type_name slowlog
host { Elasticsearch host }
port 9200
logstash_format true
include_tag_key true
</match>
到目前为止,您可以将RDS的慢查询传递给Elasticsearch。
7. 图表展示及我深入研究的重点
可视化 > 竖直条形图 > 在选择“从新搜索”后,输入搜索栏中的”_type:{ fluent-plugin-elastichsearch配置的type_name}”来进行筛选。
将X轴设置为Terms,并在Field中选择”sql_text.raw”(如果将不进行分析的字段命名为raw的情况)
现在,查询的内容将被汇总。

- 赤枠部分が切れていますが、カーソルをバーに合わせると全クエリが表示されます。
我迷上了这个地方
尽管我已经正确配置了模板,但仍然花了几天时间在Visualize中遇到”sql_tet.raw”无法显示的问题上纠结。
在这种情况下,应该检查的要点是,
-
- templateが適用されるのは、新しくindexが作られたタイミング。fluent-plugin-elasticsearchでは一日ごとにindexが作られるので、templateを設定した次の日本時間の朝9時以降に作られたデータに対して適用される
- 実際にtemplateが更新されているかどうかは、以下のコマンドで確認
以母语中文重新表达以下内容,只需要一种选项:
curl -XGET ‘http://{Elasticsearch主机}:{Elasticsearch端口}/_template?pretty’
获取 ‘http://{Elasticsearch主机}:{Elasticsearch端口}/_template?pretty’ 的数据。
- 実際にtemplateからindexのmappingに適用されているかどうかは、以下のコマンドで確認
curl -XGET ‘http://localhost:9200/{索引名称}/_mapping/?pretty’
有许多选择,但不管选择哪一种,都能正常创建多字段的数据,这让我感到困惑不已。但是在Twitter上发了一条推文后,得到了@johtani先生的帮助。
我在设置画面中选择了index,并进行了Field的重新加载,结果很顺利。

