在安装了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的具有意义的内容时,这个功能就成为制约因素了。

スクリーンショット_2015-05-17_17_23_20.png
    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的情况)

现在,查询的内容将被汇总。

スクリーンショット_2015-05-17_17_46_38.png
    赤枠部分が切れていますが、カーソルをバーに合わせると全クエリが表示されます。

我迷上了这个地方

尽管我已经正确配置了模板,但仍然花了几天时间在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的重新加载,结果很顺利。

スクリーンショット_2015-05-17_19_24_34.png
スクリーンショット_2015-05-17_19_24_42.png
bannerAds