2017年8月26日土曜日

Golang で nagios plugin をつくりました

REST api 特化した nagios plugin を Golang で書きました。SAASやサーバレスなどのサービスが本格的に使われるようになってきたので、REST apiに特化したGlobal監視を前提にしたプラグインを作りました。

インストール

go get github.com/ynishi/nagios-check-rest
cd $GOPATH/src/github.com/ynishi/nagios-check-rest
make
# move check_rest file to nagios plugin dir

よきnagios lifeを!

2017年8月12日土曜日

go開発環境構築 on Windows

  • WindowsでGolangのIDE開発環境を構築します。

goのインストール

  • https://golang.org/doc/install#windows
  • PATHの追加
    • %PATH%;%USERPROFILE%\go\bin
    • C:\go\bin は設定されるが、ユーザごとの%USERPROFILE%\go\bin は追加されない。
  • GOPATHの追加
    • %USERPROFILE%\go

gitのインストール

go tools のインストール

Goglandのインストール

  • https://www.jetbrains.com/go/
  • goimportsの設定
    • setting => keymap => goimportsを検索 => Ctrl + Shift + S などに設定
  • Terminalの設定
    • setting => Terminal => Shell path => C:\Program Files\Git\bin\bash.exe に設定
    • Unix likeな操作がターミナルパネルで使える
    • C:\Program Files\Git\git-bash.exe だと別ウィンドウになる

プロジェクトの配置

  • Goの標準に従う
  • もしくは、github.com/user 直下をまるごと一つのGoglandプロジェクトとして読み込む。
    • 一括で取り込み管理できる。
    • 各リポジトリのGo SDKなどの設定ができない。

WindowsでもよきGo lifeを!

2017年8月5日土曜日

Golangの Redash APIクライアントライブラリを作りました

Redash の Rest api をラップするGolang ライブラリを書きました。

GolangからRedashクライアントを使いたいときは使ってみてください。

今後機能追加するとしたら、cli化だと思います。セッション管理機能を持ったcliを作って一般的なDB clientのようにredashを使えればかなり便利だと思います。

https://github.com/ynishi/redash

  • インストール

    go get github.com/ynishi/redash
  • 実装機能
    • Client(Get/Post/Deleteを実行)
    • Queries系API

Redash

今年に入って仕事でOSSのBIツール、Redashを使う機会がありました。

Redashの特徴は、豊富なDB連携と、ほとんど全ての機能がAPI経由でできることです。 (Redashの構成自体そうなっている)

API利用は、オフィシャルに推奨されています。 特にドキュメントはなく、サポートに問い合わせたところ、ソースコードを見て是非使ってくださいとのことでした。

仕事の案件ではサーバにDBクライアントの追加が厳しい環境 だったので、Redashを経由してデータを取得しました。

DB連携が限定的でよければ、Airbnbが作ったツールがあります。画面の作りこみと、権限管理などがRedashよりよさそうです。 superset

Golang

Golangのライブラリはなかったので、作ることにしました。

仕事でもGolangの導入を画策しているので、テスト、ドキュメンテーション、ライブラリ管理なども含めて一通り用意しました。

APIクライアントについて

  • GolangでAPIクライアントを実装
  • http://deeeet.com/writing/2016/11/01/go-api-client/

開発にあたって

とにかく参考になるのが、本家日本語版ドキュメントです。

実際にコードを書く際には必須のEffective Goですが、本家は英語版のみです。

日本語訳は、有志の方によるものがいくつかあります。少し古いですが日本語で読めるのはありがたいです。

このページにまとまってますGo言語の初心者が見ると幸せになれる場所 #golang

プロジェクトの開始

  • 上記のGoの書き方 が参考になります。
    • ディレクトリ構成は github.comなどと密接に結びついた構成になってます。
    • GOPATHdirenv使GOPATHは固定にして、その中にリポジトリを置く方がよさそう。
    • $GOPATH内にリポジトリ本体を置いて、他の場所には、シンボリックリンクを張る構成に落ち着きました。
  • 自動テスト
    • 開発環境の自動コンパイル・テストは標準ツールはありません。godoなどを使います。
    • Goglandなら、コンパイルエラーは随時検知できます。
    • travis, werker, CircleCI, droneなど各種CIサービスで公式サポートされてます。簡単に設定できるので、最初にしておく方がいいです。
  • リポジトリタグ
    • githubのリポジトリタグ => 公式に合わせて go に。

ツール

  • vim-go
  • [Gogland(IDE)](https://www.jetbrains.com/go/)
    • 最初は便利
    • debuggerが使えないなど一部難あり
    • $GOPATH内に置いたリポジトリを取り込む(または、$GOPATH/../自分のアカウントディレクトリ/をとりこむ)

ドキュメンテーション

  • godocに合わせて作成。
    • 基本パッケージ、公開するものにコメントを書けばOkです。
    • ライセンス表記は、ファイルの一番上に書いて空行を入れてからパッケージコメントを書くとgodocに表示されません。
    • Exampleテストを書けばそれが表示されます。
  • GoDoc hostの登録方法
    • インポートするパッケージ名を一度検索します。

      //↓これで検索
      github.com/ynihsi/redash
    • 次からはキーワード検索でマッチします。

      //↓これでひっかかる
      redash

ライブラリ管理

  • 公式ツール dep があります。
    • まだ開発中で標準ツールに取り込まれてはいません。
    • (2017/7現在)設定ファイルは固まったようでプロダクションuse OKになりましたが、まだAPIは変わる可能性があります。
  • glideなど各種ツールがあります。
  • パッケージ名でバージョン管理する方法があります(これまで公式依存管理ツールがなかったため)
  • Golangの設計として安定する傾向が強いです(mapのキャストが手間で結局構造体とインターフェイスを使うなど)

よきGolang & Redash ライフを!