fluent-plugin-gcloud-pubsub-customをplaceholder対応しました

Google Cloud Pub/Sub用のFluentdプラグインfluent-plugin-gcloud-pubsub-customをFluentd v0.14から使えるplaceholderに対応しました。

v1.1.0からtopicパラメータにplaceholderが指定できるようになっています。

例えば、以下のようなfluent.confを書くことでタグの一部をtopicに指定することができます。

<match example.*>
  @type gcloud_pubsub
  project your_project_id
  key /path/to/keyfile.json
  topic ${tag[1]}

  <buffer tag>
    @type memory
    flush_interval 1s
  </buffer>
  <format>
    @type json
  </format>
</match>

タグごとに送るtopicを変更したいことは多いと思うので、便利になる機能かなと思います。 従来は同じことをやるのにforestプラグインを使う必要がありましたが、これからはプラグイン単体でできます。

また https://docs.fluentd.org/v1.0/articles/buffer-section に記載がある通り、時間やレコードの値を指定することも可能です。 autocreate_topicを設定することで自動的にtopicが存在しなければ作成することもできるので、より柔軟な設定が可能になりました。

ぜひ使ってみてください。

PCM1795搭載のDACキットDAC1795-1.5を改造

6年くらい前に製作したバーブラウンPCM1795を搭載したDACキットのDAC1795-1.5(過去記事)を久々に改造して、電源周りを強化+ディスクリOPアンプ基板を搭載しました。設定の状態もLCDに表示できるようにして、ケースも新調したのでおしゃれな感じになりました。

前面パネル:

f:id:mia_0032:20180225222105j:plain

背面パネル:

f:id:mia_0032:20180225222132j:plain

ケースはタカチのOSアルミケースを使いました。加工は大学時代にお世話になった株式会社FECさんに個人的にお願いして、加工していただきました。とても精度良く加工していただいて、組み立てしやすかったです。

パネルの印字は、イラレでデザインを作ってエーワン 自分で作るデカールシール 透明 1セット 81022をパネルに貼り付けています。

f:id:mia_0032:20180225220915j:plain

LCDのコントローラーの基板以外はお気楽オーディオキットさんで販売されている基板を使いました。

  • 電源基板
    • アナログ部 + デジタル部(5V): 定電圧電源基板(TYPE-F)
    • デジタル部(3.3V): LT3080電圧レギュレータ
  • ディスクリOPアンプ
    • Discrete-Amp Base Board + Rrenew Discrete Amp.基板 A1
  • DAC
    • DAC1795-1.5

DACのI/V変換のOPアンプにはMUSES8920を使いました。OPアンプは何種類か聴き比べして試したところ、好みの音だったのはOP275, LME49720で、特にボーカルの透明度と低音の量のバランスが良かったMUSES8920に決めました。OP275は元気な感じのする音で、LME49720はわりと落ち着いた感じの音で癖がない感じがしました。次点で良いと思ったのは、OPA2134, MUSES8820でした。

ディスクリOPアンプ基板はA1, A6B, A7, A10, A11, A12を聴き比べして、最終的にA1を使うことにしました。次点ではA7, A6Bが好みの音でした。どれも僅差ではあると感じたものの、A1は最も低音と高音のバランスが良い印象だったので、選択しました。

トランスはデジットのトロイダルトランスを使いました。プレートに固定されているタイプのトランスなので、ネジ止めしやすくて良いです。

f:id:mia_0032:20180225220924j:plain

LCDのコントローラーはmbed LPC11U24を使って作製しました。基板は自分で描きました。初めての基板製作でしたが、コネクタのパータンが逆になっていてケーブルを上下逆にしないと取り付けられない状態にはなってしまったものの、それ以外は上手く動いてくれたので良かったです。

作り終わって音を聴いてみると低音の量感がかなり増しており、電源回路を強化したのは効果がありました。デザインも気に入る形にできたので、しばらくはメインで使っていきたいと思っています。

いつになるかわかりませんが、以前作ったRenew DAC8741-1.5の方も同じように改造していきたいところです。

Athenaをbqコマンドライクに操作できるgem aqを作った

この記事はAmazon Web Services Advent Calendar 2017の16日目の記事です。

AWS AthenaをBigQueryのbqコマンドライクに使えるaq というコマンドラインツールを作りました。

github.com

AthenaをCLIで操作しようとすると踏まないといけない手順*1が多かったので、もっとシンプルに使えるようにするためです。

サブコマンドは、BigQueryのbqに慣れているので、それと同じ感覚で使えるようにしました。

またBigQueryのスキーマファイルをそのままAthenaでも使えるようにしているので、スキーマの2重管理を避けることもできます。

まだ必要最小限な機能しかないので、Issueでリクエストしてもらった機能には順次対応していこうかなと思っています。もちろんPullRequestも歓迎です。

インストール

gemでインストールできます。

$ gem install aq

コマンド

Athenaの仕様としてクエリの実行にはクエリの結果を保存するバケットの指定が必要です。 バケットは --bucket オプションで指定するか、環境変数 AQ_DEFAULT_BUCKET で指定してください。

Webコンソールから実行したときは aws-athena-query-results-<アカウントID>-<リージョン名> となるようなので、それに合わせるのが良いかもしれません。

help

コマンド一覧やコマンドの引数・オプション等を表示します。

$ aq help
$ aq help [COMMAND]

ls

データベースまたはテーブルの一覧を取得します。

# データベースの一覧
$ aq ls
# テーブルの一覧
$ aq ls [my_database_name]

head

テーブルの先頭100レコードを表示します。

$ aq head [my_db.my_table]

-n オプションで件数を変更できます。

mk

データベースを作成します。

bqコマンドではスキーマを指定しないテーブルの作成もできますが、Athenaはスキーマを指定しないテーブルは作成できないようだったので、テーブル作成はloadで行うようにしています。

$ aq mk [my_database_name]

load

テーブルの作成とデータのロードを行います。

今のところjsonl形式のファイルにしか対応していません。

schema.jsonは BigQueryのLegacySQLのスキーマファイルと同じ形式です。

$ aq load [my_db.my_table] s3://[my_bucket]/[my_object_key]/ [test/resource/schema.json] --partitioning [dt:string]

rm

データベースまたはテーブルを削除します。

# データベースの削除
$ aq rm [my_db]
# テーブルの削除
$ aq rm [my_db.my_table]

--force オプションをつけると確認が省略されます。

query

指定したクエリを実行します。

$ aq query 'SELECT * FROM "test"."test_logs" limit 10;'

*1:クラスメソッドさんのブログ記事 新機能 AWSCLIから Amazon Athena のクエリを実行する | Developers.IO を参照