Lorentzca

Lorentzca

Japan
Find generated password with 1password
mac

Find generated password with 1password

この前某サービスの新規アカウント作成後に以下のような事態に陥り5分ほど焦ったのでメモ。 * パスワードを1passwordで自動生成(英数記号20文字) * 1passwordの自動補完からの新規1passwordページ作成が出来ないサイトだったのでパスワードをコピーして登録サイトに貼り付けて新規アカウント作成 * セキュリティのための機能によりペーストした段階でクリップボードから消える * パスワードがわからない(´;ω;`) こんなときは1passwordを開いて、左側のメニューの「パスワード」を開き、変更日で並び替えて該当の日付を探せばOK。
1 min read
Auto formatting with Vim for Terraform
vim

Auto formatting with Vim for Terraform

terraform v0.6.15からfmtコマンドが追加されてました!(最近知った) * terraform/CHANGELOG.md at master · hashicorp/terraform · GitHub terraform fmtコマンドを実行すると、カレントディレクトリ以下のtfファイルをフォーマッティングしてくれます。 自然にフォーマッティングしたいので、vimでファイル保存時にフォーマッティングしてくれるようにしてみます。 vim-terraformプラグインを使います。 * GitHub - hashivim/vim-terraform: basic vim/terraform integration インストール、設定方法は.vimrcに以下の行を追記するだけ。terraform_fmt_on_saveというグローバル変数に値を入れることで保存時のフォーマッティングを有効にしています。 NeoBundle 'hashivim/vim-terraform' let g:terraform_fmt_on_save = 1 フォ
1 min read
Scroll dropdown menu
css

Scroll dropdown menu

以前algoliaを使ってblogに検索窓を設置しました。 * Trying out Algolia * Install Algolia Search on Ghost * Completion of Algolia in-site search box 無事検索出来るようになって嬉しいのですが、「検索結果7個はちょっと少ない...。」そこで検索結果を増やした所、「ドロップダウンメニューが画面外まで伸びてしまう...。」と言う問題に直面したので、ドロップダウンメニューをスクロールさてみました。 やり方 意外に簡単で、CSSだけで出来ました。overflowを使い、ボックスが250px以上の場合はスクロールさせるようにしました。良いやり方なのかはわからんちん。 検索結果は7個から21個にしました。 background-color: #fff; border: 1px solid #999; border-top: none; + overflow: scroll; +
1 min read
Interpret argument with bash
bash

Interpret argument with bash

bashシェルスクリプトで引数を解釈し処理するスクリプトを書きたい時に必要になるコマンドや特殊変数、関数をまとめました。例もあるよ。 ※ $@について追記しました!感謝! https://twitter.com/masutaka/status/796703261185216512 $* 順番に見てく。まず$*。 すべての引数が設定される特殊変数。 こんなスクリプトがあったとして…。 #!/bin/sh echo $* こうなる。 $ ./argument.sh a bb ccc a bb ccc $@ すべての引数が設定される特殊変数。え!?@*と同じじゃん! 違いは、「$@はスペース区切りで設定される」のに対し、「@*は環境変数IFS区切りで設定される」こと!知らなかった...。 IFSが空の場合は上にもあるようにスペース区切り。 $ ./argument.sh a bb ccc a bb ccc 環境変数IFSを設定すると...。 #!/bin/sh IFS='区切りだよ'
4 min read
Rewrite check_mailgun.sh to golang
mackerel

Rewrite check_mailgun.sh to golang

以前mailgunのステータスをmackerelで監視するシェルスクリプトを書きました。 * Check maingun status on mackerel これをようやくGoで書き直して、一応使える状態にはなったのでうp。 * GitHub - Lorentzca/check-mailgun: WIP デモ。 $ ./build/darwin_amd64_check-mailgun -p key-xxxx -d ghost.ponpokopon.me State OK: ghost.ponpokopon.me is active あんまりよくわかってないまま書いたので後で復習が必要。特に以下。 * http.Client{}をなぜポインタのアドレスで指定しているのか * 型周り * httpパッケージで戻り値が(resp *Response)になってて*Responseってどういう型なのかわからんみたいな * Goプログラミング言語仕様 - golang.jp * jsonパッケージが何やってるのかよくわからん
1 min read
Security-JAWS #3
aws

Security-JAWS #3

Security-JAWSに参加してきたメモ!(Security-JAWSはいつも速攻埋まるけどたまたま参加できた) * Security-JAWS 【第3回】 流れ。 * 「CloudHSMって結局なに?ハードウェアが必要なわけ」 * 「AWS IAMとOpenAMを連携してアカウント管理を効率化してみた」 * 「Amazon Inspectorを補完する - VulsとOWASP Dependency-Checkを組み合わせてプログラミング言語ライブラリの脆弱性スキャン結果を日本語化、Slack通知できるようにしてみた」 * LT「EnigmaによるPersonal Data Storeの実現可能性について」 * LT「AWSのセキュリティホワイトペーパーまとめ」 「CloudHSMって結局なに?ハードウェアが必要なわけ」 CloudHSM自体この会ではじめて知ったし、事前にググってもよくわからなかったけれどなんとなくCloudHSMについて分かった気がする。 CloudHSMとは * CloudHSM(Hardware Securit
5 min read
Check my favorite OSS with Jasper
github

Check my favorite OSS with Jasper

ちょっと前にJasperというGitHub Issue Readerを購入しました。 * JasperというGitHub Issue Readerを作りました - maru source 私は何故かブラウザの通知を活用しない傾向にあり、GitHubの通知も放置気味(仕事のissue以外では)だったのでなんかいい方法ないかなと思い購入してみました。 読み込みの時間がちょっとあるのが難点ですが、結構快適です。メールクライアントアプリっぽくissueを確認できます。また、authorやorganizationなどで好きにフィルタリングしたストリームを作ることが出来るので、自分が好きなOSSを集めたストリームを作ってみました。 * Jasper/Stream これで気になるOSSの最新情報が以前より追いやすくなっていい感じです。
1 min read
Monitoring Fluentd with Mackerel and Tuning Fluentd buffer config
mackerel

Monitoring Fluentd with Mackerel and Tuning Fluentd buffer config

h2oのログをbigqueryに送り始めました。 * Send h2o log to BigQuery 今のところ特に問題は無いのですが、正直バッファの各設定値やリトライ回数のチューニングについてはどうすれば良いのかよくわからないのでなんとかしたいところです。 そこで、mackerel-agent-pluginsを導入してみます。メトリクスを取ることでチューニングしやすくなるだろうと言う目論見です。 * mackerel-agent-plugins/mackerel-plugin-fluentd バッファについては、下記のサイトが分かりやすかったです。 * Fluentdの仕組み -バッファ機能でログ収集漏れを防ぐ- | Tech-Sketch * BufferedOutput pluginの代表的なoptionについて - Qiita td-agent側の準備 まずtd-agent.confでmonitor_agentプラグインを有効化します。下記設定を追加してtd-agentを再起動。 * Monitoring Fluentd | F
4 min read
Versioning terraform.tfstate
terraform

Versioning terraform.tfstate

この記事のS3ライフサイクルの設定では、90日以上更新のないtfstateファイルを削除してしまうので注意…。 * Terraform state file removed by S3 Lifecycle 助言を頂いた! .tfstate の backend を S3 にしていたら、バケットの Versioning Property を Enable にしておくと良いかも。 > plan で .tfstate に差分 / “Split main…” https://t.co/qX3vZAP5LW — Takashi Masuda (@masutaka) 2016年10月23日 その後口頭で公式のベストプラクティス的なものにも書いてあった気がすると聞いたので確認したところ、オフィシャルのドキュメントでS3でtfstate管理する場合はBucket Versioningを有効にすることを激しく推奨していました! Warning! It is highly recommended to enable Bucket Versioning on the
2 min read
Add logsource hostname to record
bigquery

Add logsource hostname to record

bigqueryに送るレコードに送り元のホスト名を追加してみます。 送り元ホストを条件に検索できるようになります。今のところ個人で複数のサーバを運用する予定はないので別に送り元ホストを条件に検索することも無いのですが、こまけーこたぁいいんだよ! filterプラグイン(組み込み)を利用して実現します。 * record_transformer Filter Plugin | Fluentd filterプラグインを使うと、td-agentのレコード(tailしたログファイルの行など)にデータを追加することが出来ます。 イメージ的には以下のような感じでしょうか。 [time, tag, record = {ip: "1.2.3.4", status: "200"}] ↓ [time, tag, record = {ip: "1.2.3.4", status: "200", logsource_hostname: "ponpokopon.me"}] td-agentの(fluentdの)データ構造については、以下の記事が分かりやすかったです。 *
2 min read
Update Ghost 0.11.1 to 0.11.2 with shell script
shellscript

Update Ghost 0.11.1 to 0.11.2 with shell script

ghostのアップデートが出ました。 * Ghost 0.11.2 メモリリークに関する修正があったみたいですね。メモリリークと言えば、最近ghostを0.11.1に上げたあたりからどうもmackerelからメモリ使用量のアラートがちょくちょく来るようになったので(元々メモリカツカツですが)解消することが期待できそうです。 アップデートは手作業でやりたくないので、シェルスクリプトで行っています。どのディレクトリを入れ替えればいいかなどは公式のドキュメントにアップデート手順があるのでそれを参考にしています。 * How to Upgrade Ghost マイナーアップデートはこのシェルスクリプトで充分そう。ghostのディレクトリやパーミッションなどがハードコーディングされていてあんまり汎用的ではないですが、自分用なのでとりあえず良いかなと思っています。 課題はthemeのアップデートで、GAやAlgoliaのためにthemeをいじっているので、まるごと入れ替えができないことです。これはなんとかしたいな〜と思っています。面倒なときはcoreのアップデートだけ
1 min read
Enjoy mackerel metadata
mackerel

Enjoy mackerel metadata

先日のmackerelミートアップでメタデータなる新機能が発表されました。 * メタデータ - Mackerel API ドキュメント (v0) 後日談として、この機能がどんな感じか試してみます。まずは一通りメタデータの入出力を試してから、メタデータと何かしらを連携させて遊んでみるところまでやってみます。 ホストメタデータの登録・更新 APIキーとホストIDは面倒なので環境変数に入れています。 環境の情報をメタデータで持たせてみます。 $ curl -X PUT -H "X-Api-Key: $MACKEREL_APIKEY" -H "Content-Type:application/json" -d "{\"environment\": \"production\"}" https://mackerel.io/api/v0/hosts/$MACKEREL_HOSTID/metadata/environment {"success":true} ホストメタデータの取得 うむ。 $ curl -s -X GET -H "X-Api-Key: $
2 min read
Split main.tf into modules, my server was dead
terraform

Split main.tf into modules, my server was dead

このサイトが動いているサーバはDigitalOceanで、terraformで管理しています。 最近、main.tfを見ていて見づらいなと感じたので(行数は100行もないけれど大半が変更しない行だしいつも目で飛ばしてる行だった。)moduleを使ってスッキリさせようと思い立ちました。 * Modules - Terraform by HashiCorp 結果、main.tfが大分すっきりしました。 variable "default_key" {} variable "mailgun_key" {} module "droplet" { source = "./modules/digitalocean/droplet" default_key = "${var.default_key}" } module "networking" { source = "./modules/digitalocean/networking" mailgun_key = "{var.mailgun_key}" } モジュールについてのメモ モジュールは2個
6 min read
Mackerel Meetup #8 Tokyo #mackerelio
mackerel

Mackerel Meetup #8 Tokyo #mackerelio

Mackerel Meetup #8 Tokyoに参加してきました! * Mackerel Meetup #8 Tokyo #mackerelio - connpass 会場はfreeeさんのオフィスでした。オシャレでした。以下のような内容でした。 * 新機能「メタデータ」がもたらす次世代のインフラマネジメントについて * Mackerelによる自動化と一元管理 * Zabbix から Mackerel へ、そして Mackerel で実現したコストダウン * 懇親会&LT大会 感想など。 新機能「メタデータ」がもたらす次世代のインフラマネジメントについて 序盤はMackerelの紹介。リリース予定の機能が相変わらずたくさんあって面白い。 * twilioと近日連携予定 * 外形監視で任意のヘッダを付けられる機能が近日リリース予定 * オーガニゼーション毎に管理画面とapiアクセスに対するIPアドレス制限を付けられる機能が近日リリース予定 新機能「メタデータ」の紹介。 * 任意のキーバリュー値をjsonデータとしてマカレルに登録
3 min read
Create swap with cloud-config
swap

Create swap with cloud-config

digitaloceanでcloud-configを使ってサーバ初期起動時にswapが有効になるようにしてみる。 * How to enable linux swap on boot? cloud-configの作成 こんな感じのcloud-config.ymlを書く。fstabへの記述はansibleでやっているので端折ったが、ここまでやるならfstabの編集までcloud-configの責務にしたほうが良さそう。 #cloud-config runcmd: - fallocate -l 2G /swapfile - chmod 600 /swapfile - mkswap /swapfile - swapon /swapfile 動作確認 実際にdropletを立てて確認する(もっと楽な方法無いかな…)。 doctl compute droplet create cloud-config-test --region sgp1 --image centos-7-0-x64 --size 512mb --user-data-file
1 min read
Add new column to BigQuery
bigquery

Add new column to BigQuery

h2oのログにUesr-Agent情報も追加した。ログのフォーマットで%{HEADERNAME}iとすると、任意のレスポンスヘッダを出力させることが出来る。 * Access Log Directives - Configure - H2O - the optimized HTTP/2 server access-log: path: /var/log/h2o/access.log format: "%h %l %u %{%Y/%m/%d:%H:%M:%S}t \"%r\" %s %b \"%{User-agent}i\"" bigqueryにh2oのログを送っているので、td-agentとbigquery側でも対応する。 既存のテーブルにUser-Agent用のカラムを追加する まず既存のテーブルのフォーマットを取得する。jqでフィールド情報のみを抽出すると便利。以下私のbigqueryの例。 bq --format=prettyjson
3 min read
Send h2o log to BigQuery
h2o

Send h2o log to BigQuery

h2oのアクセスログをtd-agentを使ってGoogle BigQueryに送ってみる。幾つか手順が必要。 * bigqueryの設定 * スキーマ定義ファイルの作成 * td-agentの設定 bigqueryの設定 bigqueryへアクセスするためにapiを有効化し、アクセスキーを発行するのだが、この工程が長い…。(´・_・`) 慣れてないと混乱する。 gcpアカウントの作成 作る。 * Google Cloud Computing, Hosting Services & APIs  |  Google Cloud Platform プロジェクトの作成 請求先アカウントの設定 bigqueryのapiを有効化 認証情報(とサービスアカウント)の作成 これでやっと以下のようなjson形式の鍵ファイルがダウンロードされる。td-agnetの設定で使う。 { "type": "......", "project_id": "......", "pr
4 min read
Uptimerobot release “Public Status Pages”
uptimerobot

Uptimerobot release “Public Status Pages”

Yay! 外形監視サービスのuptimerobotにステータスページを作成する機能が追加されました!ステータスページとは、GitHub System StatusとかAWS Service Health Dashboardみたいなやつです。 * Introducing “Public Status Pages” – Yay! | Uptime Robot - Blog 設定は簡単で以下のように管理画面からぽちぽちするだけだった。 せっかくなのでドメインも設定している。DNSにCNAMEレコードを追加する必要があるので追加する。そう、terraformでね。 resource "digitalocean_record" "status" { domain = "${digitalocean_domain.main.name}" type = "CNAME" name = "status" value = "stats.uptimerobot.com." } ちなみにstatusとstatsでtypoし
1 min read
Monitor LinearRegression metrics by Mackerel
mackerel

Monitor LinearRegression metrics by Mackerel

mackerelは式による監視や式によるグラフのカスタマイズができる。 * 式による監視を行う - Mackerel ヘルプ * カスタマイズしたグラフを表示する - Mackerel ヘルプ 会社では活用していて、面白いので個人でも使ってみる。 まずは式による監視を定義。Monitorsから設定できる。 公式にある例を参考に、ディスクがあふれる日数の監視をしてみる。 公式と違うのは、timeLeftForecast関数の閾値を割合で指定している点。現在の使用量をディスクサイズ合計で割って、その値が1(=100%)になるまでの時間を計算している。公式にある方法では閾値をファイルシステムの上限数で指定(2TBなら2000000000000という風に)しているが、割合での指定ならばディスクのサイズによらず固定値が使えるのでそれが利点どす。 あと、alias関数を使ってグラフに名前をつけている。ビジュアルを変えるための関数なので、監視のための式では意味ないと思うけどなんとなく…。 vda1の部分は環境によって違うので注意。 alias( s
3 min read
Completion of Algolia in-site search box
algolia

Completion of Algolia in-site search box

Trying out Algoliaで敗北しInstall Algolia Search on Ghostで中途半端ながらにAlgoliaを使ったサイト内検索ボックスを設置してきました。 Install Algolia Search on Ghostで書いたように検索結果を強調表示してしまうがゆえに、urlにemタグが挿入されてしまうのが問題でした。 今回それが解決できたので書く! 解決方法 正規表現でemタグを除去。思いつきでjsの文字列置換があるか調べたらあった!ので、それを使った。 * String.prototype.replace() - JavaScript | MDN このように書いていたのを、 suggestion: function(suggestion) { document_root = "https://ghost.ponpokopon.me/"; slug = suggestion._highlightResult.slug.value; url = document_roo
1 min read
How to enable linux swap on boot?
digitalocean

How to enable linux swap on boot?

土日に突然メモリ空き容量アラートがたくさん来たのでmackerelみてみたら、swap領域が消えてた! journal logの該当の時間帯をjournalctl --since="2016-10-02 02:00:00" --until="2016-10-02 02:30:00"で見てみると、システムがrebootされていた。 10月 02 02:22:06 ponpokopon.me systemd-logind[446]: Power key pressed. 10月 02 02:22:06 ponpokopon.me systemd-logind[446]: Powering Off... 10月 02 02:22:06 ponpokopon.me systemd-logind[446]: System is
3 min read
Use LINE Notify on Mackerel
mackerel

Use LINE Notify on Mackerel

先日mackerelがLINE通知に対応したのでその日のうちに自分のmackerelで連携した。 * 通知連携サービス「LINE Notify」に対応しました ほか - Mackerel ブログ #mackerelio * LINE にアラートを通知する - Mackerel ヘルプ トークルームも選べるけどとりあえずぼっちでやる (。ŏ﹏ŏ。) 普通に連携完了。かんたん! そして数日たったので使ってみた感想。 * mailgunステータス監視のアラートがちょくちょく来てLINE通知が来まくり鬱陶しい * memoryかつかつ運用なので閾値フラッピングしたときLINE通知が来まくり鬱陶しい * メールより気づきやすい というか気になる そこで、以下のような設定に落ち着いた。 * connectibityとブログの外形監視アラートだけLINEに飛ばす 本当にクリティカルなやつだけLINEに飛ばしていち早く来付けるようにしたいという意図です。 実務で使えるかは微妙な感じだけど(LINEてプライベート色強い印象なので)、個人用
1 min read
Update h2o, h2o yum repository
h2o

Update h2o, h2o yum repository

なんかh2oがアップデートされてないなと思ったらメンテされてるリポジトリ変わってたっぽい(非公式リポジトリなのには変わりないけど)。 * GitHub - tatsushid/h2o-rpm: Unofficial H2O RPM for Fedora, RHEL/CentOS and OpenSUSE builder まあ公式からリンクしてるし半公式みたいなものであろう!というわけで使う。 まず既存のパッケージ、yumrepo削除。 sudo systemctl stop h2o sudo yum remove h2o sudo systemctl daemon-reload sudo rm /etc/yum.repos.d/home\:funzoneq.repo ansibleのコード書き換え。今まではurlモジュール越しにrepoファイル設置してたけど、今はREADMEに従いリポジトリのファイル作成してそれをこぴーする。 - get_url: url=http://download.opensuse.
1 min read
Compare in-site search engine
ghost

Compare in-site search engine

blogにサイト内検索を設置するために幾つか試してきたので比較する。試してきたのは以下の4つ。 * Swiftype - Site search and enterprise search * Algolia | Hosted cloud search as a service * googleカスタム検索 * GitHub - jamalneufeld/ghostHunter: A Ghost blog search engine 試してみた時のメモ(googleとghostHunterはメモってない…)。 * Use swiftype in ghost * Install Algolia Search on Ghost それぞれ導入のしやすさ、見た目、検索の速さ、検索結果の正確さ、お金で比べた! * 導入のしやすさ: 導入の簡単さを示す * 見た目: 検索ボックスや検索結果の見た目の良さ * 検索の速さ: 検索結果が早く返ってくるかどうか * 検索結果の正確さ: 欲しい情報が返ってくるかどうか
2 min read
Install Algolia Search on Ghost
algolia

Install Algolia Search on Ghost

Trying out Algoliaでは大敗北しましたが、今回無理やり検索結果に一致したページに飛べるように半分なった!のでメモ。 やりたいこと! 検索ボックスで検索した結果としてタイトルの文字列を返したい。またそのタイトルはタイトルの記事へのリンクになって欲しい。 検索ボックスの見た目を変えたい。トップページの記事一覧のように画面に合わせてボックスの大きさを伸縮したい。また、Free版を使っているので、algoliaのロゴを検索ボックス付近に設置しなければならない。 やったこと JS * suggestion._highlightResult..valueで検索したときに返すattributeを決定できるみたいなので、検索結果に表示する文字列はsuggestion._highlightResult.title.valueで良い * ある文字列をリンクにするためにはlink()メソッドが使えそう * link先のurlはhttps://ghost.ponpokopon.me/とsuggestion._highlightResul
3 min read