やる気がストロングZERO

やる気のストロングスタイル

Go echoでPOST複数パラメータをsliceで受け取る方法

postでidを以下の様に複数送った時、

id = 1
id = 2

Go echoでスライスで取得するには以下のようにすると取れた

func (cont *Controller) Create(c echo.Context) error {
        .....
    params, err := c.FormParams()
    if err != nil {
        //パラメータ取得に失敗
        c.Error(err)
        return err
    }
    ids := params["id"] // []string{"1", "2"}
        .......

FormValue("id")だと"1"しかとれない。

重複Insertを防ぐ(postgreSQL)

例えばユーザー名の重複登録をNGとする場合、こんな感じでバリデーションと登録処理を書くことが多い。

※疑似コードです

begin
name = "山田太郎"

// dbからデータを取ってみて存在しないことを確認する
user = getUserByName(name)
if user != null {
    return false 
}

createUser(name)
commit

return true

でもこれだと名前が重複したユーザーが登録されてしまう可能性がある。

理由はこちら:

yaruki-strong-zero.hatenablog.jp

続きを読む

Filebeat + Logstashでrails6のログをElasticsearchへ取り込む設定

FilebeatとLogstashを使ってrails6のログをElasticsearchへ取り込もうとしたがなかなか難しかったので書く。

  • rails6のログをそのまま取り込んでもデータとして使えない
    • 構造化されていない
    • 複数行で意味をなしているものがある
  • 対応設定(具体的な設定ファイルは下記します)
    • 構造化して取り込みたい
    • ログの時間を基準時間として取り込みたい
    • 複数行で意味をなすものは、1行として取り込みたい
    • railsログとnginxログは別indexとして取り込みたい
  • 設定ファイルサンプル
続きを読む

Elastic Stackのセッティングメモ

Elastic Stackのセッティングをしてみたのでメモ。

対象OSはUbuntu18.04

参考)

www.elastic.co

Elastic Stackで作るBI環境 Ver.7.4対応改訂版 (技術の泉シリーズ(NextPublishing))

Elastic Stackで作るBI環境 Ver.7.4対応改訂版 (技術の泉シリーズ(NextPublishing))

  • 作者:石井 葵
  • 発売日: 2019/11/29
  • メディア: オンデマンド (ペーパーバック)

  • Elastic Stackとはサーバーの状態を見やすく管理するためのツール郡
  • 今回導入したツール郡
  • Elastic Search
  • Kibana
  • Logstash
    • インストール方法
    • 設定
      • モリー使用率修正
      • railsログを取り込んでElastic searchへ送り込む設定
    • 起動
    • 自動起動設定
  • Beats(Metricbeat)
    • Logstashよりも低機能だが軽量
    • インストール方法
    • 設定
    • 起動
    • 自動起動設定
  • kibanaへの接続制限どうするか(SSHポートフォワードにしてみた)
続きを読む

GKEからHerokuに引越したまとめ

実験・練習としてnekone.loveというtwitterに投稿されてる猫画像をひたすら表示しているサイトを運用している。
以前、k8sの使用感とかの確認のためにGKEを使って運用してたが、今回Herokuに移行したのでその時の作業メモなどを書く。

k8s(GKE)はなんだかんだで難しく規模の大きなシステム向き

k8sを触りたくてk8sで運用してたけど、わかったのはk8sはなんだかんだで難しいということだった。
「相当な専門性を持ってあたらないと、とても片手間で制御しきれるものではない」という印象だった。

続きを読む

「シンプルな構造にすれば保守性があがる」わけではないという話

こんがらがったシステムの保守開発で苦労した経験から新規開発では「シンプルな構成・シンプルな実装にしよう」という話が出る。
目指す方向としては間違って無いように思えるのに、それだけだとうまく行かない。

「保守しやすい構造」とはそれなりに多くの知識が必要なので、これらの知識を持たず単純に「シンプルな構成・シンプルな実装」を目指すと失敗する。

「保守しやすい構造」を作るには「どういう構造が保守しやすいのか?」を学ぶ必要がある。

これについて書く。

「シンプル」を目指したつもりが複雑になって失敗する例

まずは、ありがちな失敗例を示す。

続きを読む