ぶろぐ

日記です

ltsv形式のログをs3に格納するようにtd-agentを設定した

ltsvでs3にとりあえず上げた。後でhiveでもsparkでもいくらでも集計できるように!
Redshiftに直接取り込むならtsvかjsonじゃないとダメみたいだけど…とりあえずltsvで。
scala使う機会がなさすぎるので簡単な集計でも無駄にspark使いたい・・・。
複数のログがある場合、fluent-plugin-forest を使うと設定をDRYにできてすばらすかった。

インストール

# fluentd install
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

# start
sudo service td-agent start

# plugin install
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-s3
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-forest

td-agent.conf

<source>
  @type     tail
  format    none
  time_key  time
  path      /var/log/xxx/app/xxx-api.app.log
  pos_file  /var/log/xxx/app/xxx-api.app.log.pos
  tag       s3.app
</source>

<source>
  @type     tail
  format    ltsv
  time_key  time
  path      /var/log/xxx/access/xxx-api.access.log
  pos_file  /var/log/xxx/access/xxx-api.access.log.pos
  tag       s3.access
</source>

<source>
  @type     tail
  format    ltsv
  time_key  time
  path      /var/log/xxx/action/xxx-api.action.log
  pos_file  /var/log/xxx/action/xxx-api.action.log.pos
  tag       s3.action
</source>

<match s3.*>
  type    forest
  subtype s3

  <template>
    s3_region          ap-northeast-1
    s3_bucket          production-xxx-log
    path               xxx-api/${tag_parts[1]}/%Y/%m/%d/%H/${tag_parts[1]}-%{hostname}_

    buffer_type        file
    buffer_path        /var/log/fluent/${tag}

    time_slice_format  %Y%m%d%H
    utc

    flush_at_shutdown  true

    include_time_key   true
    format             ltsv
  </template>

  <case s3.app>
    include_time_key   true
    format             single_value
  </case>

</match>

wordpress高速化メモ

ざっと調べてみた。前提としてaws環境を使用。

Wordpress自体を高速化する

カリカリにチューニングされた状態でAMIが公開されている様子。let's encryptなど必要になりそうなものが諸々入っているので、1から作る場合やガッと移行できそうなら良さそう。ページキャッシュ機能付き。

仮想マシン構成

WordPress 最新版(KUSANAGI 専用プラグイン同梱)
CentOS 7
・Nginx 1.9
Apache 2.4
・HHVM 3.11
PHP 7.0(php-fpm, Cli
PHP 5.6(php-fpm, Cli
MariaDB Galera Server 10.0
※PHP7.0の利用は、WordPress4.4以上、および対応プラグインが必須です。

kusanagi.tokyo

CloudFrontを前段に置く

CloudFront as Reverse Proxyという構成らしい。nginxとかvarnish置かなくていいのかー。素晴らしい。

ボトルネック確認

  • Debug Bar
  • Debug-Bar-Extender

どこに処理時間がかかっているのかを確認できるプロファイラ

パフォーマンス監視

NewRelicいれてBefore/Afterでプロダクション環境のパフォーマンスがこんなに改善されましたよー、と分かるように。無料プラン内で十分使える。

KUSANAGIに変えるかそれ相当にし、CloudFrontを置いて、DBでボトルネックになっているところがない状態にすれば静的コンテンツ並に高速になるんじゃないかなー、と思います

golangからcloudsearchを使う

sdk install

go get github.com/aws/aws-sdk-go/...

example code

package main

import (
	"fmt"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/cloudsearchdomain"
)

func main() {
	svc := cloudsearchdomain.New(session.New(&aws.Config{
		Region:   aws.String("ap-northeast-1"),
		Endpoint: aws.String("http://search-XXXX.ap-northeast-1.cloudsearch.amazonaws.com"),
	}))

	params := &cloudsearchdomain.SearchInput{
		Query: aws.String("Iron Man 2"),
	}
	resp, err := svc.Search(params)

	if err != nil {
		fmt.Println(err.Error())
		return
	}

	fmt.Println(resp)
}

run

go run cloudsearch.go
{
  Hits: {
    Found: 1,
    Hit: [{
        Fields: {
          running_time_secs: ["7440"],
          image_url: ["http://ia.media-imdb.com/images/M/MV5BMTM0MDgwNjMyMl5BMl5BanBnXkFtZTcwNTg3NzAzMw@@._V1_SX400_.jpg"],
          rank: ["276"],
          directors: ["Jon Favreau"],
          actors: ["Robert Downey Jr.","Mickey Rourke","Gwyneth Paltrow"],
          rating: ["7.0"],
          genres: ["Action","Adventure","Sci-Fi"],
          plot: ["Tony Stark has declared himself Iron Man and installed world peace... or so he thinks. He soon realizes that not only is there a mad man out to kill him with his own technology, but there's something more: he is dying."],
          title: ["Iron Man 2"],
          year: ["2010"],
          release_date: ["2010-04-26T00:00:00Z"]
        },
        Id: "tt1228705"
      }],
    Start: 0
  },
  Status: {
    Rid: "uZ/D68sqFQp5O20=",
    Timems: 12
  }
}