サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
qiita.com/toyama0919
数ヶ月前、Digdag serverを導入した。 これまではタスクの依存関係だけ解決できればいいよね、というスタンスでDigdagを使っていた。 が、タスクのモニタリングやRetry、並列処理をスムーズにやりたい等が重なりDigdag serverを使うことになった。 ついでにCentosが6だったので7にアップグレードしている。 自分が躓いた点について書いてみた。 DigdagをDaemon化するためのSystemd設定 [Unit] Description=digdag [Service] Type=simple PIDFile=/run/digdag.pid ExecStart=/bin/bash -l -c 'EMBULK_ROOT=/apps/ipros-embulk/current ~/bin/digdag server --max-task-threads 2 --confi
select a, group_concat(b separator ',') from table group by a
+task1: sh>: echo task1 +task2: sh>: echo task2 +task3: sh>: echo task3 $ digdag run workflow.dig 2017-03-15 20:25:15 +0900: Digdag v0.9.5 2017-03-15 20:25:17 +0900 [WARN] (main): Using a new session time 2017-03-15T00:00:00+00:00. 2017-03-15 20:25:17 +0900 [INFO] (main): Using session /private/tmp/tmp.jxd7km/mydag/.digdag/status/20170315T000000+0000. 2017-03-15 20:25:18 +0900 [INFO] (main): Start
$ embulk run -b embulk_bundle config.yml $ embulk -J-Xmx30g run -b embulk_bundle config.yml
機能追加が多く開発が活発で、ついていけてない人も多いと思うので書いてみます。 v0.9以降の大きめの修正だけ書きました。 v0.9.0 グラフ描画ライブラリがHighChartsからPlot.lyへ Plotly | Make charts and dashboards online plotly の紹介 - Qiita グラフをiframeで自分のサイト等に埋め込み可能に ↑はデモサイトのiframe例です。 埋め込んだ瞬間publicになってしまうので使う際は注意。 データソース別のRole別権限管理 特定のRoleのUserにはMysqlにアクセスさせない、等 v0.9.2 Excelダウンロード機能 便利。 データソースにMicrosoft SQL Serverが追加 ダッシュボードの印刷用レイアウト ダッシュボードのフルスクリーン機能 大きいモニタに常時表示させとくような用途 v
デフォルトで用意されているData sourceの「re:dash metadata」で取れる各種統計値です。 日別のクエリ数、閲覧数 SELECT to_date(to_char(created_at,'YYYY-MM-DD'),'YYYY-MM-DD') AS created_at, SUM(CASE WHEN action = 'execute' THEN 1 ELSE 0 END) AS execute, SUM(CASE WHEN action = 'view' THEN 1 ELSE 0 END) AS view FROM events WHERE created_at BETWEEN NOW() - interval '6 month' AND NOW() GROUP BY 1 ORDER BY 1 SELECT '<a href="/dashboard/' || d.slu
td-agentのgemのバージョンはtd-agentに管理させつつ、--gemfileオプションを使うFluentdtd-agent 以前以下のような記事を書きました。 それを少し改良した記事です。 td-agent2のfluent-pluginをbundlerで管理 - Qiita 上記のやり方の場合、td-agentをアップグレードした後自分でtd-agentに同梱されたpluginのGemfileを自分で書き換える必要があります。 またFluentdのバージョンが上がっても、td-agentに反映されるまでラグがあります。 td_agent_gemというmethodを定義してしまって、動的にgemのversionを取得しています。 TD_AGENT_GEM_HOMEは環境に合わせて定義する必要があります。 source 'https://rubygems.org' TD_AGENT
re:dashには閾値を超えたクエリ結果に対してAlertを投げる機能があります。 これは大変便利な機能なのですが現状通知方法がメールだけでした。 通知の仕組みががpluggableになってたら便利だな〜と考えPull Requestを投げたら取り込まれました。 最新のStable versionである0.8.3で適用されてます。 よくありそうなユースケース 直近1日のエラーが閾値を超えたら通知 RedshiftやBigQueryのクエリ結果から、PV数やCV数がある閾値を下回ったら通知 Slowqueryの回数が閾値を超えたら通知 re:dashの豊富なデータソースで色々なユースケースが思い浮かびますね! クエリのスケジューリングと組み合わせると更に色々柔軟な通知が可能です。 Alertの作成方法 トップページの「New Alert」を押して作成画面に移動します。 ※↑はre:dashの
Productionでtoyama0919/fluent-plugin-exec_cronというプラグイン作って動かしています。 Fluentdのoutput pluginにはTimeslicedOutputとBufferedOutputとがあって、TimeslicedOutputで「ある程度の時刻指定」によるflushが可能です。 ただinput pluginについてはintervalを指定したflushはできますが、時刻指定は出来ません。 Inputの処理が実行される時刻は、再起動した時刻に依存します。 そこでCronによる時刻指定が可能なInput pluginを作ってみました。 似たような話だと、AWSのLambdaもCronによる時刻指定がサポートされました。((レポート) CMP407: Cron としての Lambda: AWS Lambda での呼び出しのスケジュール #r
embulk-filter-kuromojiという日本語解析するプラグインを作りました。 kuromojiを使えば漢字を読みがなに変換したり形態素解析したりすることが出来ます。 今回はサンプルに従って幾つか代表的なユースケースを書きます。 使い方 今回のサンプルデータ title
re:dashを使い始めて約半年、社内で実運用を始めて約10ヶ月が経ちました。 re:dashに繋がらなくなると苦情が出るレベル、にまでは社内で使われるようになりました。 その感想を書きます。 かなり主観も入ってますが、これから使おうとしている方は是非参考に。 現在の使用状況 クエリ数は約900 このうちスケジューリングで定期実行しているのは約200 ダッシュボード数は約150 何が良いのか OSSであること これは非常に大きいです。 商用のBIツールの場合、よくわからない挙動や動作をした場合でもベンダーに問い合わせたりする必要があります。 ただしre:dashはOSSです。 意味不明な動作をしたらコードを読めば動作が把握出来ます。 (※もちろんPythonのコードをある程度読める必要があります) また、開発が非常に活発で外部からのPRもちゃんと見てくれます。 作者の@arikfrさんが開
先日ラスベガスで開催されたre:Inventに参加し、その際にデータ分析基盤系のセッションはほぼ参加したのですが、Job管理ツールの話がかなり出ていたのが印象的でした。 AWSにはData PipelineというJob管理サービスがあるのですが、それではなくOSSのJob管理ツールを使っているところが多い印象でした。 日本では自分の観測範囲だとまだ使っているところがあまり多くない印象ですが(実際自分もほとんど使ったことない)、いくつか候補を絞って触って見たので感想を書きます。 あくまでJenkinsしか使ったことがないような個人の感想としてお読みください。。 Airflow Airbnbが開発元 re:Inventでは多くのセッションで紹介されており、一番勢いがある印象を受けた。 依存関係はPythonで書く タスクの登録はUIからやるのではなく、コマンドラインから登録 Python力を前
ドキュメントにはどこにも書いておらず、githubのissueにちょこっと書いてあるだけだったのでメモしときます。 sqlを書く
toyama0919/fluent-plugin-http_shadowというShadow Proxyっぽいことを簡単にやるプラグインを作りました。 production環境で半年くらい動かしてたのでメモしときます。 「Fluentd Meetup 2015 夏」で実際のユースケースを発表しました。 Shadow Proxyサーバとは Shadow Proxyサーバについては以下がわかりやすいです。 気軽なMySQLバージョンアップ - まめ畑 Go言語を含む複数種類の言語により実装されたソフトウェアのベンチマーク - Qiita 実装としては以下のようなものが公開されています。 cookpad/kage lestrrat/p5-Geest kentaro/delta 本番のリクエストをそのままバックエンドにあるサーバーに複製して送信するのですが、アプリケーションの規模が大きくなればなるほ
TD_AGENT_ARGS="/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --gemfile /etc/td-agent/Gemfile --use-v1-config" PATH="${PATH}:/opt/td-agent/embedded/bin" bundlerにpathが通っていないと何も言わずエラーになる。 Gemfileを配置 現在インストールされているプラグインを移行する。 以下をサーバー上で実行し、 $ GEM_HOME='/opt/td-agent/embedded/lib/ruby/gems/2.1.0/' gem list --local | grep "fluentd\|fluent-plugin" | ruby -ne 'gem = $_.split(" ");
td-agent2からはデフォルトがv1で起動 v0互換性は完全互換ではないことに注意 1.1.1X系では対応していない(--use-v1-configは使えない) fluentd-0.10.55でv1でもv0との同じ設定で動作させることが出来るようになった。(それ以前のv1はリテラルのエスケープなど記述方法が異なっている。) が、プラグインによっては問題があるらしい(自分は今のところ遭遇していない) 余程の問題がない限りは2.1.2か1.1.21を使う方が無難だと思われる。 td-agent2を使っていない場合の設定 td-agentが1.1.2X系を使っている場合、/etc/sysconfig/td-agentに以下のように記述するとv1で起動できる。 TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent
Ruby DSLとは? fluentdの設定のRuby DSL的な記法。 --use-v1-configでRubyのコードを設定に書くことが出来ますが、さらに柔軟な記法が可能になる。 以前調べていたことがあるので、まとめてみる。 実行方法 設定ファイルの拡張子がrbであればDSLモードで起動する
toyama0919/ejというツールを作りました。 ちょっとデータ確認したいだけなのにkibana開いて検索条件を入れるのは結構な手間です。 かといってcurlも長くて辛いし、、json書くのがどうも慣れません。 ejというruby製のCLIを作ったので紹介します。 インストール $ echo '[{"hoge":"huga"},{"fuga":"hoge"}]' | ej -b -t test $ ej -s [ { "hoge": "huga", "@timestamp": "2014-12-10T00:12:21+09:00" }, { "fuga": "hoge", "@timestamp": "2014-12-10T00:12:21+09:00" } ] $ ej -s --no-source-only { "took": 1, "timed_out": false, "_sh
何の機能か? AWSのAPIは、基本的にあるリクエストに対するレスポンスを即座に返してしまい、そのリクエストで意図した結果が必ず起こるとは限りません。 APIリクエストに成功すると、HTTPコード200 とともにインスタンスの情報が返ってきます。 ですが、HTTP 200を受け取ったからといって、このインスタンスがrunningになるとは限りません。 APIレスポンスが返ってきた後、その対象が望むべきStatusになっているかどうかを暫くの間監視しておく必要があります。 このような場合aws-sdk v2から導入されたwaitersを使うと便利です。 まずv2をインストール
備考 基本testはぐるぐる回すと思うのでexport GRADLE_OPTS="-Dorg.gradle.daemon=true"しておきましょう。 gradle2.1でのみ確認です。 Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up
sudo su - root wget -N https://services.gradle.org/distributions/gradle-2.0-all.zip unzip gradle-2.0-all.zip -d /opt/gradle ln -sfn /opt/gradle/gradle-2.0 /opt/gradle/latest printf "export GRADLE_HOME=/opt/gradle/latest\nexport PATH=\$PATH:\$GRADLE_HOME/bin" > /etc/profile.d/gradle.sh
redshift: adapter: redshift database: applog host: *****.**********.ap-northeast-1.redshift.amazonaws.com port: 5439 username: app password: encoding: utf8 pool: 5 timeout: 30000 # タイムアウトは長めに ActiveRecord::Base.establish_connection(:redshift) result = ActiveRecord::Base.connection.execute "select * from table_name where log_date='#{d.strftime("%Y-%m-%d")}'" result.each{|record| p record # hash }
kibanaの検索条件ですが、社内などで使っているとあっという間に検索条件がいっぱいになってしまいます。 以下の方法で検索条件をquery stringで指定できます。 検索ボックスに{{ARGS.query || '*'}}と記入して保存 今回は「my_get」という検索条件名で保存。 ページをリロードしてしまうと変数が展開されてしまうので、入力してそのままダッシュボード保存する。 query=~を指定して保存した検索条件にアクセス open 'http://localhost/kibana/index.html#/dashboard/elasticsearch/my_get?query=user_name:toyama%20AND%20user_id:1' 検索条件をquery=user_name:toyama AND user_id:1と指定しています。 query stringなの
recommendifyとは オープンソースのレコメンドエンジンです。 アイテム間の結びつきをスコア付で返してくれます。 redisのインストール(Admin権限で)
Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } { "field1" : "value1" } { "index" : { "_index" : "test", "_type" : "type1", "_id" : "2" } } { "field1" : "value2" }
mkdir -p /var/log/newrelic/ mkdir -p /var/run/newrelic/ mkdir -p /etc/newrelic/ cp -p /opt/newrelic_plugin_agent/newrelic_plugin_agent.rhel /etc/init.d/newrelic_plugin_agent chmod +x /etc/init.d/newrelic_plugin_agent cp -p /opt/newrelic_plugin_agent/newrelic_plugin_agent.cfg /etc/newrelic/ Application: license_key: ${newrelic_key} wake_interval: 60 #proxy: http://localhost:8080 elasticsearch: name
esdump --url http://localhost:9200/ --indexes logstash-2013.10.12 logstash-2013.10.13
このページを最初にブックマークしてみませんか?
『@toyama0919のマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く