ゆるふわキャンパー

ゆるふわキャンパー

このブログは読むと思わずキャンプに行ってみたくなってしまう楽しいキャンプノウハウをわかりやすく紹介するわけではなく、技術ネタ中心でたまに酒と釣りの話をします。

Delete Go Map entry and rename Go Map key
golang

Delete Go Map entry and rename Go Map key

Mapの操作を色々する機会があったのでまとめてみます。 * The Go Programming Language Specification - Map_types それぞれのセクションごとに動作するコードのリンクがあります。play.golang.org上にあるので、その場で実行することができます。 ゴール pathみたいに/区切りの文字列をキーとして持っているMapに対し、特定の条件を持つキーを削除したり、キー名を変更する。 普通はそんなこと意識しないようにMap作っていくと思うんだけど人生は長い。Mapのキーをごにょごにょしたいときもある。 Mapの作成 いくつか作成方法はありますが今回は以下のように作成。このMapをごにょごにょしていきます。 func defineMap() map[string]int { m := map[string]int{ "/tabemono/fruit/apple/hoge": 1, "/tabemono/fish/carp/fuga": 4, "/tabemono/fruit/p
2 min read
Convert markdown to Google Slide
google

Convert markdown to Google Slide

少し前の話ですが、Decksetが無い環境で既存のDecksetで作成したスライドの手直しをする必要に迫られました。 Decksetが無いのでGoogle Slideに移行して作業しようとしたのですが、スライドのページが数十枚ほどあり、手でGoogle Slideに移すのはツライところでした。 そこで調べたところmd2googleslidesというツールがあったので使ってみました。 JavaScript製のツールみたいです。インストール方法は以下。 npm install -g md2gslides 使い方は簡単で以下のようにmd2gslidesコマンドにマークダウンファイルを渡してあげるだけです。 md2gslides hogehoge.md G Suiteのマイページのトップにスライドは作成されていました(確か)。 初回はプロンプトが開いてGoogleアカウントの認証があります。DecksetのようにHTMLタグは対応していないので、HTMLタグが入っているとエラーが出ます。また、![](./pic.jpg)のようなファイル挿入の構文にも対応して
1 min read
DigitalOcean released Cloud Firewalls
digitalocean

DigitalOcean released Cloud Firewalls

DigitalOceanにマネージドなファイアウォールが追加されました! ✨ * Cloud Firewalls: Secure Droplets by Default 管理画面やAPIから設定できるファイアウォールで、設定はDigitalOceanのネットワーク層で適用されます(フィルタされたパケットはドロップレットまで届かない)。 この機能によってドロップレット毎にiptablesやfirewalldを設定する必要がなくなるのがうれしいですね。 sourceもしくはdestinationにはIPv4, IPv6, タグ, ドロップレット, ロードバランサを指定することができます。tagを指定することで楽かつ柔軟にスケールできそうですね。 terraformでも近いうち実装されそう。 * resource_digitalocean_firewall.go: Add DO Cloud Firewalls (#15124) by keinohguchi · Pull Request #1 · terraform-providers/terraform-p
1 min read
Post GCP Billing data to Mackerel with Node.js
mackerel

Post GCP Billing data to Mackerel with Node.js

Node.jsのBigQueryライブラリを使ってGCPのBillingを取得してみました。 * Get GCP Billing with Node.js 次はこのBillingの情報をMackerelにサービスメトリックとして送ってみます。 Mackerel側のインターフェースの確認 サービスメトリックは以下のデータ形式で送れば良いみたいです。 [ , , … ] 詳細はこちら。 * サービスメトリック - Mackerel API ドキュメント (v0) つまり、今回の場合は以下のようなデータを送れば良いみたいです。 [ {name: "gcp.monthly_cost", time: "1234567890", value: "0.1567"} ] Node.jsのコードを書く 以下のようなコードを用意します。 // Imports the Google Cloud client library // Instantiates a client var bigquery
2 min read
Get GCP Billing with Node.js
gcp

Get GCP Billing with Node.js

Node.jsのBigQueryクライアントライブラリを使ってみました。 * Node.js client library for Google BigQuery 今回はこれを使ってGCPのBillingデータを取得してみます。 ※ GCPのBillingデータをBigQueryに送る方法は以下。 * Export GCP Billing data to Google BigQuery 以下のようなコードを書いてみます。 // Imports the Google Cloud client library // Instantiates a client var bigquery = require('@google-cloud/bigquery')({ projectId: 'GCPのプロジェクトID', keyFilename: 'BigQueryへアクセスするためのjsonキーのpath' }); // Query var query = 'SELECT SUM(cost) AS sum_cost, LEFT (FORMAT_UTC_
1 min read
Visualize illegal ssh access attempts and access source
sshd

Visualize illegal ssh access attempts and access source

/var/log/secureをBigQueryに送り始め、sshdへのアクセスがあるIPアドレスを多い順に集計してみたりしています。 * Send secure log to BigQuery * Visualization of IP address accessing sshd 今回は日毎にssh接続の試行失敗回数を集計して、それに対するIPアドレスの内訳も出してみます。 こんなクエリを作成してみます。 SELECT LEFT(FORMAT_UTC_USEC(UTC_USEC_TO_DAY(time * 1000000)), 10) AS day, COUNT(ident) AS count_ident, REGEXP_EXTRACT(message, r'(\d{1,3}\.\d{1,3}\.\d{1,3}
1 min read
Visualize CloudTrail with Traildash and Arukas
arukas

Visualize CloudTrail with Traildash and Arukas

このブログが動いているサーバはDigitalOceanですが、terraformのbackendにS3やDynamoDBを使うなど、AWSのサービスも使っています。 必然的にIAMユーザを作成しアクセスキーを発行することになるので、CloudTrailでユーザの活動やAPIの使用状況を保存しています。 * AWS CloudTrail (AWS API の呼び出し記録とログファイル送信) | AWS しかし、正直活用できていないです…。というのも、CloudTrailで保存されるログはjsonで、CloudTrail自身に特に可視化機能も同梱されていないのです。なのでログを取ってはみているものの見ることがないという…(良くない)。 そこで、何かいい感じの可視化ツールが無いか探してみたところ、Traildashというツールがありました。 * GitHub - AppliedTrust/traildash: AWS CloudTrail Dashboard 今回はこのTraildashを使ってCloudTrailの可視化をしてみます。 Traildash
3 min read
Re:dash no longer supports Heroku
heroku

Re:dash no longer supports Heroku

Re:dashをHeroku上にデプロイして利用しています。 * redash - ゆるふわキャンパー Re:dashのバージョンはv0.12で、いい加減古い(最新はv1.0.3)のでアップデートしようとしたのですが…リポジトリにProcfileが無い! 調べてみると、Herokuのサポートは公式ではしなくなるとのこと…。(´;ω;`) * Remove Procfile.heroku - it's no longer up to date. · getredash/redash@0e68228 · GitHub 皆によく使われていたであろう、Herokuの無料枠での利用がスペック不足でできなくなるのが主な理由みたいです。 一応Procfileをサルベージしてgunicorn -b 0.0.0.0:$PORT -w4 redash.wsgi:appと修正すれば使えるようですが…。 頑張れば利用できるけどおすすめはしないよとのこと。Herokuでちゃんと全てまかなっている人ならいいかもしれないってコメントされていた。 * Crashes on Her
1 min read
Visualization of IP address accessing sshd
security

Visualization of IP address accessing sshd

/var/log/secureをBigQueryに送り始めました。 * Send secure log to BigQuery 1日あたり十数MB分ほどのペースで溜まってきているようです。 これを使って何かしたいなということで、とりあえずsshdへアクセスしてきているIPアドレスを可視化してみます。 sshdへのアクセスのログはFailed keyboard-interactive/pam for root from port 46472 ssh2のような感じでメッセージ内にアクセス元のIPアドレスが記録されているので、これを使います。 以下のクエリを使います。 * REGEXP_EXTRACTで正規表現に合致した文字列を抽出できるので頑張ってIPアドレスを抽出(数値1~3桁.数値1~3桁.数値1~3桁.数値1~3桁からなる文字列) * 期間はTABLE_DATE_RANGE関数で指定 * ident(identification?識別子?)がsshd * アクセスが多い順にTOP50個に絞っている SELECT REGEXP
1 min read
Mackerel Meetup #10 Tokyo #mackerelio
mackerel

Mackerel Meetup #10 Tokyo #mackerelio

行ってきた! * Mackerel Meetup #10 Tokyo #mackerelio - connpass Microsoft Azure Integration と Windowsサポートの強化について いつも通りmackerelの紹介から。機能が増えてきたので紹介内容も多くなってきた! Microsoft Azure Integration と Windowsサポートの強化について。 * azureの利用が拡大しているらしい * 今後すぐazureインテグレーション追加される * azure monitor apiカラメトリックを取得している * windowsサポートの強化 * インストールが簡単に * 主要なプラグインのインストーラーを同梱 * メモ帳でも設定変更できるようになったw 次世代mackerelについて。 * 夏過ぎくらいには出るぽい...! Mackerel + Azureで支えるエムティーアイのヘルスケアプラットフォーム 社内でクラウド派閥!AW
2 min read
Customize Slack notifications template for new Disqus comments
zapier

Customize Slack notifications template for new Disqus comments

Zapierを使って、Disqusにコメントが来たらSlackに通知するようにしています。 * Notify Slack when commented on DISQUS 上記の記事で以下のようにぼやいていましたが、 でもどの記事に対してコメントされたかはわからない! そのへんも色々いじれるならそのうちやってみようと思います。(`・ω・´)ゞ 普通に設定できましたあああ!!しかもけっこう詳細にカスタマイズできた(´;ω;`) 以下のようにして設定できます。 ↓のような内容にしました。URLを展開(画像とか)する設定があったのでOFFにしました。 @コメント者 コメント内容 コメントのURL コメントされた日付 テストしてみます。 良い!!!これでかなりコメントの確認が楽になりました。✨
1 min read
Send secure log to BigQuery
td-agent

Send secure log to BigQuery

/var/log/secureをBigQueryに送ってRe:dashで攻撃っぽいアクセスなどを可視化してみたかったので送ってみました。 準備 * /var/log/secureをtd-agentでも読めるようにパーミッションを下げる * /var/log/secureがローテートされてもパーミッションが戻らないようにlogrotateの設定を変更する td-agentの設定 td-agentの設定を追加します。 * 部分でログの送信元のサーバのホスト名をレコードに追加している # syslog (secure log) @type tail format syslog path /var/log/secure tag syslog.secure pos_file /var/log/td-agent/syslog.secure.pos @type record_transformer
2 min read
Annotate provider maintenance time with Mackerel
mackerel

Annotate provider maintenance time with Mackerel

このブログはDigitalOceanが提供しているVPS上で動いています。 * digitalocean - ゆるふわキャンパー DigitalOceanはもちろん、AWSやさくらVPSなどの物理リソースを提供しているプロバイダでは、プロバイダの都合によってメンテナンスが発生する場合があります。例えばネットワーク機器の差し替えや古くなった物理サーバの入れ替えなどによるものです。 このようなプロバイダ側で予測が可能で、サービスの可用性に影響する類のメンテナンスについては、まず何らかの形(メールや公式サイトなど)で告知が行われます。 DigitalOceanのシンガポールリージョンでネットワーク機器のメンテナンスのため 2017/04/25 05:00 ~ 07:00(JST) の間でネットワークが不安定になる場合があるとのこと ? — †殲滅の修道者† (@lorentzca) 2017年4月19日 ふと思いついて↑のメンテナンス期間をMackerelのグラフアノテーションに入れてみました。 はたしてグラフアノテーションは未来の日付に対して有効なのでしょうか
3 min read
Report GCP billing and Referral domain everyday
gcp

Report GCP billing and Referral domain everyday

少し前から、個人Slackに個人で利用しているGCPの使用料金とブログのリファラを集計して日時レポートとして出すようにしています。 * Slack × Re:dash 以下のように、毎日午前11時にredash-reportチャンネルにレポートが届きます。 忘れないうちに良かったと感じたことをメモしておきます。 よかったこと * GCPの使用状況を毎日意識することができる * 月ごとのグラフを出すようにしたので推移がわかり良い感じ…! * 2月から跳ね上がっている(といっても料金的には微量ですが)のはmackerelでGCP料金をホストメトリックに取り始めたからですね(毎分クエリ叩いてる&サーバの情報じゃないのでサービスメトリックに移行しなきゃあかん) ← みたいなことがわかったり * どこから自サイトへのアクセスが多いのか毎日意識することができる * アドベントカレンダー強いな… もう5月になるやぞ * 楽しい * 日々変化するデータが可視化され、それを労力をかけずに観察できるのが楽し
1 min read
mruby libraries provided by H2O
mruby

mruby libraries provided by H2O

最近H2Oでmrubyを使うことに興味を持ち入門してみました。 * Hello world with mruby on H2O 実際に使われているmrubyのコードもみてみたいと思い調べたところ、標準でH2Oがmrubyのライブラリを提供していました。ありがたい。 * h2o/share/h2o/mruby at master · h2o/h2o · GitHub 読むぞ!!! また、実際にこのライブラリを使いたい場合ですが、CentOS7かつtatsushid/h2o-rpmを使ってH2Oをインストールした環境では、以下のpathにライブラリが収まっていました。 $ rpm -ql h2o | grep rb /usr/share/doc/h2o/examples/h2o_mruby/hello.rb /usr/share/h2o/mruby/acl.rb /usr/share/h2o/mruby/bootstrap.
1 min read
state=running is deprecated with Ansible
ansible

state=running is deprecated with Ansible

個人サーバの構成管理にAnsibleを使っています。 * ansible - ゆるふわキャンパー Ansibleをアップデートしたところ以下のWarningが出るようになりました。 [DEPRECATION WARNING]: state=running is deprecated. Please use state=started. This feature will be removed in version 2.7. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. どうやらstate=runningという書き方は非推奨になり、Ansibleの2.7で廃止されるようです。 PRはこれっぽい。廃止される理由はよくわからなかった...。 * service: deprecate state=running by resmo · Pull
1 min read
Hello world with mruby on H2O
ruby

Hello world with mruby on H2O

このブログのウェブサーバーにH2Oを使っています。 * h2o - ゆるふわキャンパー H2Oはデフォルトでmrubyに対応しており、これが最近気になっています。 * Using Mruby - Configure - H2O - the optimized HTTP/2 server 楽しそう。 H2O x mrubyで人はどれだけ幸せになれるのか from Ichito Nagata そこで、まずはHello Worldするところまでをやってみます。 その前に色々わからないので調べてみます。 mrubyとは mrubyとは以下の特徴を持つ言語。 * 組み込み機器やアプリケーションへの組み込みに最適化された軽量なruby * ほぼrubyと互換性がある(軽量化のため最低限の機能のみに絞っているのでrubyと全く同じ機能が使えるわけではない) H2Oのドキュメントを読んで見る 次にH2Oのmrubyについてのドキュメントを読んでみます。 ドキュメントによると、mrubyによってユーザーが独自のロジックを実装できるようになる
2 min read
Conflict gpg-agent
gpg

Conflict gpg-agent

GitHubにGPG認証を利用しています。 * Export GPG Key さっきbrew upgradeをしていて、たぶんgpg関連のアップデートがあって恐らくそれがきっかけと思うんですが、git commitができなくなりました。 調査のためgpgコマンドをいじっていたら以下のエラーが出ました。 gpg: starting migration from earlier GnuPG versions gpg: *警告*: サーバ'gpg-agent'はこちらより古いです(2.0.30 < 2.1.20) gpg: error: GnuPG agent version "2.0.30" is too old. gpg: Please make sure that a recent gpg-agent is running. gpg: (restarting the
1 min read
vi-copy is incompatible with tmux 2.4
tmux

vi-copy is incompatible with tmux 2.4

tmuxをアップグレードしたら以下のエラーが出ました。 /Users/licorice/.tmux.conf:44: invalid or unknown command: unbind -t vi-copy Enter /Users/licorice/.tmux.conf:45: invalid or unknown command: bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy" エラーの通りコピーモードが使えなくなって死にそう。 チェンジログを見ると、どうやら構文が変わったみたいですね。 * tmux/CHANGES at master · tmux/tmux · GitHub * Incompatible Changesの部分を参照 * The emacs-copy and vi-copy tables have been replaced
1 min read
Get mackerel graph annotation list with mkr
mkr

Get mackerel graph annotation list with mkr

mackerelにはグラフに注釈(アノテーション)を付ける機能があります。 * グラフを利用する - Mackerel ヘルプ * グラフアノテーション - Mackerel API ドキュメント (v0) このアノテーションを一覧して見たかったのでやってみました。Web画面からは一覧を表示できなくて、APIかmkrコマンドから取得する必要があります。そのやりかたをメモ。 以下のコマンドで取得できます。 * --from ~ --toで期間を指定しなければならない * 2016/01/01 00:00:00から今現在までの期間を指定している * エポックタイムで指定しなければならない(dateコマンドでエポックタイムに変換している) mkr annotations list \ --service <サービス名> \ --from $(date -jf '%Y/%m/%d %H:%M:%S' '2016/01/01 00:00:00' +%s)
1 min read
Update to Ghost 0.11.8
ghost

Update to Ghost 0.11.8

Ghost 0.11.8がリリースされました。 ✨ * Ghost 0.11.8 いくつかのバグフィックスや機能改善がありますが、その中でも「複数人同時に同じ記事を更新して衝突が発生するのを防ぐ機能」が良さそう。 今までは同時に同じ記事を更新できました。ブラウザをリロードするともう一方で更新した内容が反映される感じでした。危うい。 さっそくどんな感じになったのか試してみます。 アップデートはいつもの手順でやります。以下のスクリプトを実行するだけ。 では実際にブラウザで複数のウインドウを開いて同時に編集してみます。 後から開いた方のウインドウで編集して、保存ボタンを押すと...。 ブロックされました!! ✨ 感想 私は一人ぼっちでこのブログを運用しているので縁のない機能ですが、複数人で運用しているブログ(会社のブログとか)ではとても有用そうですね!
1 min read
DigitalOcean released Monitoring
digitalocean

DigitalOcean released Monitoring

DigitalOceanの管理画面にモニタリング機能が追加されました!✨ * Introducing Monitoring: Insight into Your Infrastructure モニタリングでできること まだできることは少なく、最小限という感じ。 * グラフ(ドロップレット毎にデフォルトで用意されている)をモニタリングし、閾値を超えたら通知を出すことができる * 通知先はまだメールかSlackの2つだけ * モニタリング対象はドロップレット単位もしくはタグで指定できる 費用 無料! free with all Droplets. Introducing Monitoring: Insight into Your Infrastructure 設定方法 まずドロップレットにdo-agentをインストールする必要があります。 * DigitalOceanがリリースしたdo-agentとはどういうものなのか curl -sSL https://agent.digitalocean.com/install.s
2 min read
Display my server Load Average in OSX menu bar
shell

Display my server Load Average in OSX menu bar

最近あだちんの家に行って(たまに遊びに行ってノートPCを借りて遊んでいる)bitbarを入れて遊んできたので、私も気分転換にbitbarで個人サーバのロードアベレージを表示させてみました。 以下の雑なスクリプトを作成してbitbarのプラグインディレクトリ(私は~/Dropbox/bitbarにしている)にget-loadavg5.5m.shという名前で保存します。 * ファイル名はプラグイン名.時間.拡張子という命名規則 * mkrでmackerelからメトリックを取得して結果をechoしているだけ #!/bin/bash hostId=XXXXXXXX export MACKEREL_APIKEY="YYYYYYYY" loadavg5=$(/usr/local/bin/mkr fetch -n loadavg5 $hostId | /usr/local/bin/jq ".\"$hostId\".loadavg5.value") echo ?:${loadavg5:0:4} できた。超平和。表示する意味がない...。 上のスクリプトではLAが10
1 min read