Go

サーバ/プロセスのメトリクスを使ったNagios/Mackerel/Consulのチェックコマンドを作るときに便利な metr を作った

Go

Consulでちょっとしたヘルスチェックを追加したいと思ったのですが、例えば iowaitが高いかつuserは低いとき という条件を書こうとしたときに、「うっ。。!どう書けばいいんだ。。」となってしまったので、作りました。 github.com これはなに metr は次の…

標準入力の指定の文字列に色をつけるツール colr

Go

Go Conference ‘19 Summer in Fukuokaでも少し紹介したcolrです。 github.com これはなに まずは以下のスクリーンキャストをご覧ください colr は tail -F /path/to/access.log のようなログにカジュアルに色をつけるツールです。 $ tail -F /var/log/nginx/…

Goなどでクロスコンパイルしたワンバイナリなソフトウェアを最小工数でdeb/RPMパッケージにしてくれるNFPMが便利

Go

みなさんはdeb/RPMパッケージを作ったことはありますか? 私はtcpdpのパッケージ作成ではじめて作りました。具体的にはここらへんです。 tcpdpはlibpcapに依存していることもあり、DockerでUbuntu/CentOSの環境を作ってその上でコンパイルして、合わせてdeb/…

tblsがデータソースとしてCloud Spannerに対応した

tbls now supports Cloud Spanner !!! https://t.co/TeTg4ulPb6— k1LoW (@k1LoW) 2019年8月12日 約1,000円の資金を投じて作りました。 1000円超えてた。。。 pic.twitter.com/b60FVMw5V6— k1LoW (@k1LoW) 2019年8月13日 Cloud Spannerのスキーマをtblsで出力…

google/gopacket + libpcap で作るツールのパケットバッファ戦略

Go

tcpdpの中のお話です パケットを一時的に保持するバッファ google/gopacket/pcap パッケージでパケットを取得するようなツールを作る場合、2つのバッファを持つことになります。 libpcapが持つバッファ google/gopacketが持つバッファ(バッファ付きチャネル…

tail -F /path/to/access.log のようなストリームに対して何度でもgrepを試行錯誤できるツール filt を作った

Go

filtというツールを作りました github.com これはなに まずは以下のスクリーンキャストをご覧ください tail -F /path/to/access.log のようなログの流れを止めてはgrepをして、止めてはgrepのコマンドを変更してしています。 その間、実は裏では実際のストリ…

Songmu/timeoutからコマンドの停止処理部分を理解しつつ切り出してk1LoW/execを作っている #gocon

Go

Go Conference'19 Summer in Fukuoka、私の中でもう少し続いています。 exec.CommandContext は "孫プロセスがあった場合にそれが止まらない" #gocon でのsongmuさんの発表を聞いて、孫プロセスを雑に放置してきたなーと思いまして、気持ちを改めようとして…

tblsがデータソースとしてBigQuery / Amazon Redshiftに、出力フォーマットとしてxlsx / PlantUMLに対応した etc.

前回のエントリからtblsにいくつか機能追加をしたので、v.1.15.2時点での現状報告です。 BigQueryを bq:// でサポート 家庭内の要望によりtblsのBigQuery対応を進めています— k1LoW (@k1LoW) 2019年5月11日 データセット単位でドキュメント化できるようにな…

プロセスやホストのメトリクスをトリガーに任意のコマンドを実行できるデバッグ用ツール Sheer Heart Attack を作った

Go

サーバの運用をしていると、 なぜかホストのCPU使用率やメモリ使用率が上昇するタイミングがあるが、なぜ(何が)そのタイミングで上昇しているのかわからない CPU使用率やメモリ使用率を通常時以上に使用しているプロセスにはあたりがついているが、なぜそ…

undockerでdocker imageの中身を確認する

最近、同僚の @r_takaishi からの非常にありがたいPull Requestもあって、sshcの整備を行なっています。 github.com そのときにDockerを利用してSSH接続のインテグレーションテスト環境を(ほぼ @r_takaishi が)作りました。 そして紆余曲折あって、https:/…

tcpdpをPROXY protocolに対応させた

Go

なるほど!面白そうです!— k1LoW (@k1LoW) 2019年1月30日 というわけで、勉強も兼ねてtcpdpをPROXY protocolに対応させてみました。 今回想定したユースケース 私自身がPROXY protocolのユースケースを持っているわけではなかったので、まずは「TCPパケット…

ディレクトリを遡ってMakefileを探してそのディレクトリでmakeを実行するmkを作った

Go

makeコマンド、rakeみたいにディレクトリを遡ってMakefileを探してくれないので面倒— k1LoW (@k1LoW) 2019年2月2日 Goを書くようになってからなのか、GMOペパボに入ってからなのか、make を実行することが多くなったのですが、make はMakefileがあるディレク…

evryの実装をシンプルにした

Go

evry を公開してからオンラインオフライン問わず様々な場でフィードバックをいただいて、それをもとに修正したv0.2.0をリリースしました。 github.com 指定コマンドを実行するための実装をシンプルにした Use `sh -c` instead of go-shellwords by k1LoW · P…

tail -Fなどの標準出力を一定時間ごとに指定のコマンドに渡し、その実行結果をシーケンシャルに出力するコマンド evry を作った

Go

ログの流量やサマリを、カジュアルに、そしてリアルタイムに確認したかったので作ってみました。 github.com これはなに 標準入力の内容を、一定時間ごと(もしくは一定行ごと)にまとめて指定のコマンドに渡し、その実行結果をシーケンシャルに出力するコマ…

~/.ssh/configを使って *ssh.Client を作成する

Go

GMOペパボ Advent Calendar 2018 の4日目の記事です。 運用しているサーバに何か問題が発生したら、SSH接続をして原因の特定をします。特定するためにいろいろ確認をします。 しかし、自分はチームメンバーの中では上記があまり速いほうではありません。勘所…

Fukuoka.go#12 で GoでTCPパケットを読むための最初の一歩の話 をした #fukuokago

Go

Fukuoka.go に参加してきました! fukuokago.connpass.com 主催者、発表者のみなさん、ありがとうございました! ちょっとトラブルがあって楽しみにしていた「Road to your goroutines」をまともに聞けなかったので残念がっていたら、素晴らしいまとめエント…

pprofでCPU100%になる原因を特定する

Go

tcpdpのprobeモードで、CPUが100%に張り付くという問題(結果、原因としてはしょうもないミス)がありました。 機能としては正しく動いているので、単純にテストケースを増やしてもどうにもならず、pprofを使って原因となっている箇所を絞り込んでみました。…

TCPパケットを解析して構造化ログでダンプするツール tcpdp を作った

Go

やっと形になってきました。 github.com 「データベースのクエリログを取得したい」 例えば、データベース(RDBMS)のクエリログを取得したいとき一番確実な方法は、そのRDBMSに備わっているログ機構を利用することです。 一方で、全てのクエリログを出力す…

net/http/pprof のheapの値は何を表しているのか

Go

pprofのWeb UIの "heap" の数って何を表すんだろう? pic.twitter.com/JWlAgIL5Ka— k1LoW (@k1LoW) 2018年9月7日 tcprxyというTCPプロキシを作っています。 github.com 8月中旬くらいから「よし、プロダクションレディになるくらいまで開発してやろう」と、…

go.uber.org/zapでコンソールとファイルのそれぞれに別々のフォーマットでログを出力する

Go

夏休みの自由課題です。 今作っているサーバにログ出力の機能をつけたいと思っていて、ログライブラリを検討していました。 必要な要件は以下です。 ファイルには、構造化ログを出力したい(JSONでもLTSVでもなんでもいい) コンソール(STDOUT)には、人間…

tbls v1 をリリース / SQLiteに対応した etc.

Go

データベースドキュメント生成ツールのtblsですが、ひと通り機能が落ち着いた(と思った)のでメジャーバージョンのv1をリリースしました(現在は v1.2.1)。 github.com 前回 v0.8.2 からの追加機能や修正などを紹介したいと思います。 Amazon Redshiftのサ…

TCP Proxyを書いてMySQLの通信を覗いてみる

Go

お、MySQLの通信も見えそうだぞ? pic.twitter.com/GVxBXqHEgA— k1LoW (@k1LoW) 2018年7月25日 "TCP Proxyを書いてPostgreSQLの通信を覗いてみる - Copy/Cut/Paste/Hatena" の続編です。 MySQLの通信を覗いてみる また簡単なクエリだけを対象にします(プリ…

TCP Proxyを書いてPostgreSQLの通信を覗いてみる

Go

なんとなく興味がでてきたのでインターネット情報を参考にTCP Proxyを書いてPostgreSQLの通信覗いてみた。クエリの取得まではできた。HTTP/1.1の世界で生きていたので、プログラムでバイナリ?を触ったの久しぶり過ぎるし(TokyoTyrantのPHPクライアント書い…

Fukuoka.go#11 に参加してspf13/cobraの紹介をした #fukuokago

Go

先週、Fukuoka.go#11 に参加しました。 fukuokago.connpass.com どの発表も興味深く聞くことができました。主催の皆さん。発表者の皆さんありがとうございました!! 感想を1つだけあげるとしたら どの発表も本当に面白かったのですが、個人的には @deeeet …

データベースドキュメント生成コマンド tbls 更新情報 ( MySQLに対応/ER図自動生成/リレーション・コメント追加機能 etc)

Go

tbls更新情報です。 やっとできた— k1LoW (@k1LoW) 2018年6月5日 やっと、もともと実装したいと思っていた機能をすべて実装できましたので紹介します。 なお、tblsコマンドについては以下のエントリに書いています。 k1low.hatenablog.com 追加機能 ( ~ v0.8…

CIフレンドリなデータベースドキュメント生成コマンド tbls を作った

Go

進捗報告です。 https://t.co/sVmTUw6klC とりあえずPostgreSQLの実装はできたので、明日からテーブル設計のドキュメント化とそのドキュメントのCIは回せそう— k1LoW (@k1LoW) 2018年5月20日 ドキュメントの更新が追いつかない問題を解決したい 活発なプロジ…