サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
y-ken.hatenablog.com
GO言語いいですよね。学習しやすくパフォーマンスも良く、メモリ管理が楽で、さらにワンバイナリも作れると。 コマンドラインツールなどもGo言語でさくっと書けば、ワンバイナリで非常に便利な物ができあがります。 今回「みんなのGO言語」をsuzuken (@suzu_v) | Twitterさんよりご恵贈いただきましたので、早速紹介を行いたいと思います。 気になる目次も紹介します。これだけの情報が144ページに収まっているので、通勤時間中の読み物にもぴったりです。 第1章Goによるチーム開発のはじめ方とコードを書く上での心得(松木雅幸) 第2章マルチプラットフォームで動作する社内ツールのつくり方Windows(mattn) 第3章実用的なアプリケーションを作るために(藤原俊一郎) 第4章コマンドラインツールを作る(中島大一) 第5章The Dark Arts Of Reflection(牧 大輔
2015年にはFluentd v0.12系が主流となってきましたが、まだ古いv0.10系を利用している環境も残っていると思います。 プラグイン開発する上では、Fluentdの後方互換性が保てているかのテストもTravis-CIで行いたいですよね。 その時にどのように行うのか、メモを残しておきたいと思います。 また、どのようにAppraisalsを使い、手元でバージョンを使い分けたテストが実行できるかも紹介します。 マイナーバージョン違いのFluentd毎にテストを実行する td-agent1系とtd-agent2系で採用されているそれぞれのFluentdバージョンでテストを実行します。 次のように編集することで、複数のバージョンそれぞれでテストが実行できるようになります。 cf. https://github.com/y-ken/fluent-plugin-twitter/pull/22/
最近はTravisCIでの不可解なエラーのためgem update bundlerを追記する対応が必要になり話題となりましたね。 なんと今度は、今まで動いていたapt-get installが、次のメッセージで失敗するようになりました。 E: Unable to locate package libgeoip-dev さて、困りました。 早速対処法を探ります。 解決方法 結論としては、.travis.ymlのbefore_installのセクションで、 sudo apt-get updateと記述してリポジトリファイルの更新を行うとエラーが解消します。 エラー内容 リポジトリファイルの読み込みは成功しているが、そこにlibgeoip-devが存在しないようです。 $ sudo apt-get install libgeoip-dev Reading package lists... Don
Fluentdでログを集める時にそのサーバのホスト名(hostname)をレコードに追加したい。 そういう時に便利な設定サンプルを紹介します。 ユースケース tailプラグインで収集したApacheのエラーログに、ホスト情報を付与する その他、ございましたら教えてください Filterを用いた手法(オススメ) td-agent2環境(fluentd v0.12以降のバージョン)を利用していれば、Filterプラグインが使えます。 手間の掛かるタグ書き換えは必要ありません。 次の方法が標準付属のプラグインで実現できるため、最もシンプルです。 <source> @type forward </source> <filter debug.*> @type record_transformer <record> host ${hostname} </record> </filter> # @typ
RubyでUTF-8文字列の全角英数字の表記揺れを統一したいとき、 気をつけないと希に文字化けする事象を見つけたのでメモします。 NKFを用いて全角英数字→半角英数字に変換する方法 ググるとよく出てくる方法は次の通りです。 もちろん、問題なく普通に動きます。 $ pry [1] pry(main)> require 'nkf' => true [2] pry(main)> NKF.nkf('-m0Z1 -w', "Ruby−2.2") => "Ruby-2.2" ここでWindowsの機種依存文字が混じるとどうなるでしょうか。 pry(main)> NKF.nkf('-m0Z1 -w', "ルビー Ⅱ") => "ルビー Ⅱ" pry(main)> NKF.nkf('-m0Z1 -w', "ルⅡ") => "繝ォ竇。" pry(main)> NKF.nkf('-m0Z1 -w', "Rub
SoundCloudが内製しているモニタリングシステム「Prometheus」がいま気になっております。 時系列データベースを用いた柔軟なクエリ言語を用い、ダッシュボードによる可視化やアラート機能もあるそうです。 Prometheus: Go言語で書かれたモニタリングシステム - ワザノバ | wazanova とりあえず使ってみたので、紹介します。 環境 CentOS 6 インストール このドキュメントに従い、進めていきます。 http://prometheus.io/docs/introduction/getting_started/ git clone $ cd /usr/local/src/ $ sudo git clone https://github.com/prometheus/prometheus.git Initialized empty Git repository i
elasticsearchはLuceneをベースにしているため、細かい粒度でのファイルを多く生成します。 そのため "too many open files" エラーが発生して停止しないよう、安定稼働のためには日頃のリソース監視が必要です。 では、どのようにファイルディスクリプタの利用状況を確認すれば良いのでしょうか。調べてみました。 検証環境 複数のバージョンでテストしております。 elasticsearch 1.0.1 elasticsearch 1.3.4 elasticsearch 1.4.2 調査の目的 root権限が必要な/proc/{proc_id}/limitsなどを参照せずに次の値を取得する方法。 max_file_descriptors open_file_descriptors 同時に開ける最大のファイル数(Max open files)の確認 elasticsear
Twitterで言及されている様々な記事のURLを収集したいと考えた時、次の方法が選択肢となります。 定期的にAPIを叩く ストリーミングAPIを使う 前者の方法では単位時間毎のAPIコール制限を容易に超えてしまうので避けたいところですね。 そこでストリーミングAPIを使いたい所ですが、URLのトラッキングを行う方法がわかりにくかったので調べてみました。 ストリーミングAPIでのURLトラッキング方法 その方法は意外なほどシンプルでした。 ドットやスラッシュなどの記号を半角スペースにして、コンマに並べるというものです。 例えば、"example com"と指定すると、次のパターンにマッチします。 example.com www.example.com foo.example.com foo.example.com/bar I hope my startup isn’t merely ano
GitHubで後で見ておこうと放置してしまったIssueやPullRequestはございませんか? ブラウザUIで見られるダッシュボードからはPull RequestsやIssuesが見られますが、 その一覧には自分のリポジトリへ第三者が発行したIssueやPull Requestはありません。 この画面に検索クエリが打ち込めそうなフィールドがあるので、ここにヒントがありそうです。 GitHubの検索で使える修飾子 次のドキュメントを読むと、GitHubでの検索にはこういった検索修飾子がありました。 これらを組み合わせるとさまざまな検索が出来そうです。 is type user team author created merged Searching issues - User Documentation https://help.github.com/articles/searching
Fluentd Advent Calendarの4日目は、Fluentdプラグインを数多くメンテナンスする@yoshi_kenがお届けします。 Fluentdはその拡張性の高さから、数多くのプラグインがリリースされております。 これをご覧になる方の中には、プラグインを自作された方もいらっしゃるかもしれません。 本日はこれからプラグインを書かれる方にも、既に自作プラグインを公開されている方にも便利なTipsをお届けします。 さて、設定ファイルの記法が拡張された、V1 Format環境下での動作を保証するためのテストコードの準備はいかがでしょうか。 筆者自身がメンテナンスするプラグインもこれから対応を進めていくといった状況です。 手を付ける前は実装の仕方は意外と大変なのでは無いかと不安でしたが、実際はとても簡単です。 STEP-1 : 既存のconfigureメソッドを拡張する configu
複数のインターフェースを搭載するマシンでelasticsearchをクラスタ稼働させると、1つ目のインターフェースのIPを対向クラスタへ返します。そのため、1つ目のインターフェースでクラスタ同士の疎通が出来ない構成で稼働させるには、network.publish_hostの調整が必要です。 もちろんサーバ毎の設定ファイルに個別にIPアドレスを書けば動きますが、そんな運用の手間となる設定は入れたくないですよね。 そういった時に便利に使える論理名(プレースホルダ)が用意されているので、それを使いましょう。 elasticsearchのネットワーク設定で使える論理名 これらの論理名はnetwork.bind_host や network.publish_hostで利用できます。 CentOS環境ではYAMLファイル /etc/elasticsearch/elasticsearch.yml にて設
photo by Irina Souiki elasticsearchのlogstash形式インデックスを、定期的にcronで削除したいときに便利なワンライナーを紹介します。 使うコマンドはdateとcurlのみという大変シンプルなものですので、環境を選びません。 既存スクリプト 同様の目的を達成するためのスクリプトはいくつかあります。 いずれも、インストールやスクリプトの設置が必要なものです。 1. elasticsearch-curator elasticsearchが公式に開発している多機能な運用管理スクリプトです。 しかしながらPythonであることと、筆者のCentOS 6.5のPython 2.6環境ではうまく動きませんでした。 次のように利用します。 $ curator --host my-elasticsearch delete --older-than 14 --pref
Fluentdなどから収集したメッセージをelasticsearchへ格納してKibanaで可視化するソリューションは素晴らしく、とても人気があります。次の画像のように見栄えが良いことも特徴です。 このダッシュボードアプリであるKibanaはJavaScriptアプリケーションです。そのため静的ファイルを配置すればどこでも動きます。 しかしそれだけのためにApacheやNginxなどのWEBサーバを新たに起ち上げるのは手間ですよね。 実は新たに起ち上げない方法もあるのです。こんな時に役立つTipsを紹介します。 elasticsearchのsiteプラグイン siteプラグインは、ウェブベースのインターフェースを提供するものです。 elasticsearchの挙動へ変更を加えるものではないため、サービス停止(再起動)を行わずにインストール・アップデート・アンインストールができます。 モニタ
2014年9月9日開催の『サーバ/インフラエンジニア養成読本 ログ収集〜可視化編』 出版記念!執筆者が語る大講演会!にて発表してきました。 今回は「Fluentdのお勧めシステム構成パターン」というタイトルで、ユースケース毎にどのようなシステム構成をすると運用しやすいかのノウハウをお話しさせていただきました。 また、パネルディスカッションではラジオ番組のようなスタイルで、モデレータに @naoya_ito(伊藤直也氏)をお招きして行い、Kibana以前の可視化はどうしていたの?など、ざっくばらんなトークが出来てとても楽しい経験でした。 発表資料 今回は書籍に書かれた内容をざっとおさらいしつつ、システム構成パターンについて解説しました。 発表資料はSlideshareにアップしております。 Fluentdのお勧めシステム構成パターン 書籍 本書はWEB+DB Pressを取り扱う書店のほか、
Fluentd、Kibana、Elasticsearchを大特集した本書は好評を集め、Amazonを始めとする大手書店でもベストセラー入りしております! そんなログ収集から可視化を実現するためのノウハウが凝縮された本書は、フロントエンジニアの方にも大変おすすめです。 サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus) 私は第2特集「ログ収集ミドルウェアFluentd徹底攻略」を書き下ろしで担当しました。 このノウハウを用いれば、手間のかかるログ収集をスマートに解決できることでしょう。 さらにいまなら、某書店では購入特典にFluentdステッカーが付いてきます! その店舗を一部とはなりますが、こっそり紹介したいと思います♪ また、電子書籍版の発売も始まりましたので、記事末尾にて紹介します。 Fluentd
2014年8月8日、ログ収集や可視化を始めたいエンジニア必携の書籍が技術評論社より刊行されます。 本邦初公開となる、全編書き下ろしの特集で構成された本書を読むことで、ログ解析の有用性からログ収集、保存、可視化手法を習得できます。 私はこの第2特集「ログ収集ミドルウェアFluentd徹底攻略」の執筆を担当しました。 サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus) それでは、それぞれの特集について簡単に紹介したいと思います。 サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 特集1 ログ解析からはじめるサービス改善 (鈴木 健太) 第1特集では、ログを蓄積して解析する意義とは何か、コーヒーショップのECサイトを例に、データ分析のケーススタディと共に解説されています。 第1章 はじめに 第2章 サー
photo by saschaaa LinuxにおいてTIME_WAITなコネクションを減らす手法としてnet.ipv4.tcp_tw_recycle=1にするテクニックは有名です。 しかし環境によってはSoftBankに限らず問題が起きるため、利用には注意が必要です。 一体どのような問題が起きるのか、詳細に解説されたブログを見つけたので紹介します。 検証記事 記事1 kernel: TCP: time wait bucket table overflow の解消とTIME_WAITを減らすチューニングという記事では次の言及がされています。(抜粋) サーバ側で net.ipv4.tcp_tw_recycle が有効で、クライアント側でTCPのタイムスタンプオプションが有効(Linuxの場合net.ipv4.tcp_timestamps = 1)だと、NAT/LBを超えたときにSYNを落とし
JVMで動くelasticsearchを安定運用させるにはリソース監視も欠かせません。 今回は手軽なリソース監視が出来るMuninを用いて、インストール方法から作られるグラフサンプルの紹介まで行います。 利用プラグイン elasticsearch 1.x系で動くプラグインは現状これ1つのみです。Perlで書かれているため外部依存無しで動きます。 y-ken/munin-plugin-elasticsearch A useful Munin plugin for monitoring elasticsearch 1.x nodes in Perl. https://github.com/y-ken/munin-plugin-elasticsearch 次のプラグインが同封されています。 elasticsearch_cache - フィールドとフィルタのキャッシュ状況 elasticsearc
Passenger 3.x で複数のRubyバージョンを使い分けるには、とてもトリッキーな対応が必要でした。 ところがPassenger 4.0.0 より公式に複数のRubyバージョンに対応しました。つまり、同一筐体のApacheで動く他アプリケーションへ影響を与えることなく、気軽にアプリ毎に使うRubyバージョンを変更できるようになります。 これまでの手法 mod_proxyを用いて、必要なRubyバージョン毎に単体起動させたpassengerにTCP/Socketでプロキシするというものでした。なぜなら、読み込むモジュールだけでなく、グローバル値として指定するPassengerRootやPassengerRubyの設定が衝突するためです。 Phusion Passenger & running multiple Ruby versions – Phusion Corporate Blo
elasticsearchは全文検索サーバとしても知名度を獲得しており、次のような記事も人気を集めています。 elasticsearchを全文検索サーバとして活用するなら読んでおきたい、6つのブログ記事をピックアップ - Y-Ken Studio http://y-ken.hatenablog.com/entry/essential-japanese-blogs-for-elasticsearch-study MySQLでは実現の難しかったLuceneならではの次のような特徴を兼ね備えたelasticsearchはとても魅力ですよね。 ファセット検索 (Facet) http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets.html 柔軟な日本語処理 (kuromoji) http
LuceneベースのNoSQL全文検索サーバ、elasticsearchはログ解析の収集先として取り上げられることが多いですが、優れたNoSQL全文検索サーバでもあります。 日本でも2013年末頃から続々とブログ記事や利用事例が増えている注目の技術でもあります。 今回は、その中で全文検索サーバとしての切り口で分かりやすく解説された6つの記事を紹介します。 (追記)Hello! Elasticsearch. — Medium ナレッジワークス株式会社のKunihiko Kidoさんによるとても分かりやすい記事です。 https://medium.com/hello-elasticsearch 2014年4月に入ってから怒濤の勢いでこれらのステキな記事が追加されています。 Elasticsearch Features — 主にシステムを中心とした特徴まとめ Elasticsearch Quic
GeoIPを用いてIPアドレスを元に位置情報をレコードに付与するFluentdプラグイン、fluent-plugin-geoip v0.1.1をリリースしました。 今回の目玉は、GeoIP判定対象の複数キー対応化と、プレースホルダ記法への対応するための設定ファイル仕様の変更です。 https://github.com/y-ken/fluent-plugin-geoip http://rubygems.org/gems/fluent-plugin-geoip 前回記事はv0.0.4の紹介でしたので、それ以降にリリースしたv0.0.5とv0.0.6とv0.1.0、そしてv0.1.1のリリースノートをまとめたいと思います。 アップデート方法 次の手順でアップデート後、fluentd (td-agent)を再起動してください。 # for fluentd $ gem install fluent-
FluentdのtailプラグインでElasticsearchのログを収集する方法を紹介します。 収集対象ログ /etc/elasticsearch/logging.ymlにて設定された動作でログを次のファイルに出力します。 /var/log/elasticsearch/elasticsearch.log /var/log/elasticsearch/elasticsearch_index_search_slowlog.log /var/log/elasticsearch/elasticsearch_index_indexing_slowlog.log slowlogに関しては/etc/elasticsearch/elasticsearch.ymlにて設定した閾値時間を超えて処理したクエリを記録できますが、デフォルトでは設定が行われていません。後々のパフォーマンス観察を容易にするためにも設
ログ収集ツールFluentdに、Apacheのmod_rewriteのようにtagを自在に書き換える機能を追加する、fluent-plugin-rewrite-tag-filterのv1.4.1をリリースしました。 https://github.com/y-ken/fluent-plugin-rewrite-tag-filter http://rubygems.org/gems/fluent-plugin-rewrite-tag-filter 前回記事はv1.3.1の紹介でしたので、それ以降にリリースしたv1.4.0とv1.4.1のリリースノートをまとめたいと思います。 お知らせ 今回は4点、嬉しいお知らせがあります。 Fluentd公式プラグイン化 fluent-plugin-rewrite-tag-filterですが,ユーザも多くユースケースがたくさんあるので,公式リポジトリ以下でメン
fluent-mixin-rewrite-tag-nameというFluentd向けMixinプラグインを公開しました。 このMixinプラグインは、<source>や<match **>の中で使えるtagオプションを追加します。 タグ書き換え周りのプラグイン実装の省力化ができますね! https://github.com/y-ken/fluent-mixin-rewrite-tag-name http://rubygems.org/gems/fluent-mixin-rewrite-tag-name これは、次のようなプラグインで使えるタグ書き換えに用いられている機能を、その他のプラグインに転用できるよう切り出しました。 fluent-plugin-forest fluent-plugin-record-reformer fluent-plugin-rewrite-tag-filter 提
dotCloudが開発しているLinuxコンテナ型仮想ソフト「Docker」が巷で話題ですね! これはLXCにストレージドライバとしてunionfsから派生したaufs(CentOSではLVMのThin Provisioning)を組み合わせた所がキモで、つまりファイルシステムの差分管理が出来る特徴があります。 なんだか仕組みを想像する限りディスクI/Oが遅そうな印象ですが、どの程度のものかベンチマークを取りました。 ストレージドライバ Dockerは元々aufsで作られていたのですが、それはAUFS対応のカーネルを入れる前提です。 これはRedHat系ディストリビューションへの対応を行う上での大きなハードルでした。 そこで同様にCoW(CopyOnWrite)を実現出来るLVMのThin Provisioningが採用されています。 ドライバがaufsなのかLVMを扱うためのdevice
Elasticsearch 1.0.0 released ということで、早速アップデートしてみました! elasticsearchを0.90.3から1.0.0へrpmで更新しました。 /etc/elasticsearch/elasticsearch.ymlの差分もあるので、オリジナルに加えていた変更点の反映・プラグインの更新も済ませたらesを再起動。数分応答返さず焦ったが無事完了!— Y.Kentaro (@yoshi_ken) February 13, 2014 本日は、このアップグレードを行った記録を紹介します。 # アップデート前 $ rpm -q elasticsearch elasticsearch-0.90.3-1.noarch # アップデート後 $ rpm -q elasticsearch elasticsearch-1.0.0-1.noarch 追記 公式のアップデート手
2014年2月7日にリクルートテクノロジーズで開催された「第3回 ElasticSearch勉強会」でトークしてきました!前回の皆様の発表はKibanaに関する情報がメインでしたが、今回は検索技術中心のガチな内容でとても楽しかったです。 懇親会では今回発表したYamabikoのコア部分である fluent-plugin-mysql-replicator を実際に利用している方もいらっしゃるなど、感謝感激雨あられでした!ありがとうございます! その他にも2社合同で合同勉強会を開催しようといったお話を頂けるなど、実りのある時間を過ごせました。 発表テーマ 今回は「MySQLユーザ視点での小さく始めるElasticsearch」という発表です。 ログビジュアライズアプリであるKibanaを通じてElasticsearchに触れる方も少なからずおり、世間ではKibanaとセットで使う物であるような
任意のSQLクエリで取得した結果の差分から、insert/update/deleteイベントを検知するプラグインをリリースしました。イベント検知だけでなく、レコードの内容と共にElasticsearch/Solrへ同期を行う、Outputプラグインも同封しています。 これはあえてバイナリログ(MySQLBinlogAPI)は使わずに、SQLクエリの実行結果の差分を見てinsert/update/deleteイベントを検知します。 そのため、純粋なテーブル同期だけでなく、任意のJOINやVIEWテーブルを元とした差分同期処理が実現できるのが特徴です。 y-ken/fluent-plugin-mysql-replicator https://github.com/y-ken/fluent-plugin-mysql-replicator http://rubygems.org/gems/flue
次のページ
このページを最初にブックマークしてみませんか?
『Y-Ken Studio』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く