シンプルなtd-agent2用systemd Unit設定ファイル

CentOS7用にtd-agent2をインストールした場合の起動スクリプトはどんな感じになるかなと書いてみる。

[Unit]
Description=td-agent is a data collector
After=syslog.target network.target

[Service]
Type=simple
User=td-agent
Group=td-agent
ExecStart=/usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config

[Install]
WantedBy=multi-user.target

これでひとまず起動と停止は普通に出来るけど、旧initスクリプトでやっているulimit設定だったり、reload時のHUPのあて方とかはまだサッパリ分からないのでまだ全然。

それより、CentOS7用にomnibus-td-agentを準備するのが超時間がかかった…もし自分でやるときは、Ruby 2.1が必要なのでrbenv (ruby-build) でインストールしてからビルド。

メンテされてるTreasure Dataの方には頭が上がりませんね。

CentOS7ではPuppet2系が動かない

なぜなら標準で提供されてるパッケージのRubyが2.0以上になっているため。CentOS7はPuppetは3系しか動作しない。

以下、標準・Puppetlabsリポジトリを使ったパッケージによるインストールした場合についてです、gemの場合とかは知らない。色々ごちゃごちゃといじっていたので他のCentOSのバージョンとの整理も兼ねて。

CentOS5, CentOS6はPuppetlabsのyumリポジトリを利用することでPuppet 2系も3系も動く。ただしCentOS5の場合はディストリ標準パッケージのRubyが1.8.5の為、PuppetlabsのdependenciesによってRubyが1.8.7にアップグレードされることに注意。

つまり既存にCentOS5,6混在の環境があって、新たにCentOS7を追加しようとした場合は

  • 早々に既存マニフェストをPuppet 3.X readyにマイグレーションして
  • 既存環境のPuppetも3.Xにアップグレード

していった方が良い。2.Xのサポートもいつまで続くか分からないし。

既存環境にCentOS4があった場合は…サポートも切れてるし知らない子ですね…

マニフェストの互換性は0.2Xから2.6はほぼ問題無いけれども(2.7も大丈夫なはず)、2.Xから3.Xはちょこちょこエラーになる部分もあるんで頑張って直す。

Release Noteをみて変更点だけ直せば大概OKだけれど、他ハマりどころとしては、Puppetと同じタイミングでバージョンアップされるFacter 2.X でObsoluteな記載方法がある為、自作facter変数を修正しないといけないかもしれないというところ。

Facter.add(:servertype) do
    setcode do
 -    Facter.hostname.gsub(/\d+$/ , "")
 +    Facter.value(:hostname).gsub(/\d+$/ , "")
    end
  end

サーバ/インフラ徹底攻略

サーバ/インフラ徹底攻略をご恵贈いただいていました!@mizzyさんありがとうございます。明日会うのにレビュー無しでお会いできないので遅まきながらエントリ。

全体通して、モダンなインフラ運用管理や関連技術を学ぶには必読だなという印象を持ちました。

特に表紙に載っているワード通りですが

  • Infrastructure as Code
  • テスト駆動インフラ&CI
  • Immutable Infrastructure

それぞれについて

  • 何故出て来たのか、また話題になっているのか
  • 実際にどういうことをやるのか、どう実践するのか

が把握でき、自分で手を動かしながら理解するのに非常によくまとまっています。

自分は情報のキャッチアップと今までの整理としてとても参考になりましたが、入門書としても良書だと思うので、これから上記トピックについて学びたい人にも強くお薦めします。

Infrastracuture as Code & インフラCI

自分が今もっとも興味がある内容。

Infrastracture as CodeについてはChefなら巻頭企画「[入門]コードによるインフラ構築」を、Puppetなら特集2「テスト駆動インフラ&CI最前線」を読むことにより

  • コードでサーバの状態を記述することによるメリット
  • テストでサーバの状態をチェックすることによるメリット

が学習できます。また特集3ではさらにそこから進めて、Wercker, DigitalOceanを利用した継続的テストの実践が紹介されています。

実は自分も現在進行形でJenkins, Vagrant on Linuxを利用したインフラCIを進めていますが、準備や手間を考えると紹介されている内容はすぐ取り組めて効果も高そうだと感じました。

また、特集2第4章で紹介されているGitHub Flowをベースとしたワークフローを読むことで、それぞれ紹介されてきた技術要素がつながり、享受するメリットが最大化されることが改めて納得出来ました。

Immutable Infrastructure

特集3もImmutable Infrastructure登場の背景から実践まで詳細に網羅されています。

特に、オンプレ環境での実践としてApache MesosやMarathon, Zookeeperなどの一通りの設定方法がまとまっていますが、この特集ほど詳細に記述されている情報はWebでもそれほど多くない為、これらを使ってBlue-Green Deploymentを実現する流れは、一度は自分でも構築して理解を深めたいなと感じます。

またAWSを利用したBlue-Green Deploymentも紹介されており、こちらはより実践的な内容になっていました。

その他特集

今はデファクトスタンダードとなったNginxの詳解である特集4、リバースプロキシサーバとしては自分もよく利用していますが、キャッシュ機能については弱いので参考になりましたし、拡張モジュールのしくみと作り方は見たことがなかったので勉強になりました。少し話がそれますがngx_mrubyなど組み合わせる利用シーンもアツいですし、押さえていきたいプロダクトとしてNginx単体で取り上げられているのは渋いチョイスだなと感じました。

特集5ではサイバーエージェント社のメンテナンスについて体系だって整理された情報を得られる特集でしたが、こちらもあまり表には出てこないような生々しい運用の裏側がのぞけて良かったです。メンテナンスの精度をあげる努力や、実際の取り組みの中でも特に内製の「障害情報管理ツール」があるのは興味深かったのと、時限リリースなどに用いられるいわゆる「タイマーコード」はあるあるだなあと自分の実情と照らしながら読ませていただきました。単にメンテだけでなくインフラ設計や耐障害性についても言及されており読み応えもすごかったです。

ブログをGhostに移行した

Ghostを使いはじめた。

Ghostで記事書いてるとこ

Rubyでこんなスクリプト書いて、OctopressのMarkdownファイルからSQLiteにデータ移行した。

#!/bin/env ruby

require 'time'
require 'sqlite3'
require 'securerandom'

db = SQLite3::Database.new('/path/to/ghost/content/data/ghost.db')

Dir.glob('/path/to/octopress/source/_posts/*.markdown').each {|f|
  filename = File.basename(f)

  title = File.readlines(f).grep(/^title:/)[0].split('title:')[1].delete('"')
  slug = filename.slice(/\d{4}-\d{2}-\d{2}-(.*).markdown/, 1)
  date_string = filename.slice(/(\d{4}-\d{2}-\d{2})/)
  markdown = File.open(f).read
  uuid = SecureRandom.uuid

  stmt = db.prepare("INSERT INTO POSTS ( uuid, title, slug, status, markdown, author_id, created_at, created_by, published_at)
  VALUES ( ?, ?, ?, 'published', ?, 1, datetime(?), 1, datetime(?));")

  stmt.execute(uuid, title, slug, markdown, date_string, date_string)
}

そしてその後 https://github.com/jbrooksuk/OctoGhost というリポジトリを見つけた。もっと先に気づいてれば…

記事が増えないまま、こういう暇潰しばかりが増えていく。

2013年振り返り

1月 CROSS2013でスタート

エンジニアサポートCROSS 2013に登壇します でのトークセッション。

内容としては、他のパネルディスカッション登壇者3方の結婚(@kuwa_twさん)や、奥様が第二子ご懐妊(@kazeburoさん)、ノロけ(@mirakuiさん)などのめでたい話を横で聞くという感じでした。

mirakuiさんとはこのイベントで初めて知り合ったけど、後の出来事に深く絡んでいくことになるとはこの時はまだ予想もしていなかったのであった。。

2月 突然出てきた #3分で常松 ハッシュタグ

mizzyさんの振り返りでもまとめられています。最大の成果ってちょっとおかしいけど。

2/13、この日は忘れもしません、渋谷のマルハチで社外エンジニア仲間で飲んでた時に先輩同僚の話になりまして、何故かmizzyさんがtwitterでちょっかい出されるという流れに。あん時だれいたんだっけなあ、けんじおじさんとすたじおさんいたっけ?くらいしか思い出せない…

その時突然TL上に現れたツイート

何かよく分からないけど、現場でも「何これ!!1」となりまして、以降何かある度に見かけるようになりました。

社内でも主に俺が3分以内に何かタスクを消化したときなどに使われます。

面白おかしく使われるように、スピードスターとしてこれは今後も続けていきたい。

6月 WEB+DB PRESS Vol.75に寄稿

入社時の採用面接でも目標というか夢に掲げていた「本や雑誌に寄稿する」というのが一つ叶いました。
WEB+DB PRESS Vol.75 に「継続的Webサービス改善ガイド」という記事を書きました

今まで4年の仕事の内容振り返りになったし、とてもいい機会になったと思う。次は単著を目標に。

BHBのインフラ周りでちょいちょい手伝いしてる

面白大ヒットコンテンツを量産しているバーグハンバーグバーグのインフラの手伝い、つーと大げさだけど、相談な感じでアドバイスなりちょっとした設定を手伝ったりしている。

具体的にはキャンペーンでピークでガッとアクセス上がるケースが多いので、無料のCDNでCloudflare使ったらどう?とか実際どんな風に使うか説明したり。

アクアクララの172兆8000億の企画の時とか、事前に知らなかったしホストしているhetemlの1サーバのトラフィックがまさに"KTK"(急にトラフィックが来たので)で頭打ちになって色々詰んで大変だったけど、一回設定したらかなり捌けててCloudflareかなり使えるスゴい。

というわけで

技術的なまとめ無いけど大体こんな一年でした。来年はもっとカッコいいことかけるように楽しんで、もっと色々さらけ出していこうと思っています。