りんけーじ - blog

2025/01/31 08:01 : FreeBSDでOpenObserve v0.12.1を動かす

OpenObserveをFreeBSDでビルドして動作させた記録。

実験は2024/10頃に実施して、今更記録を起こしている。OpenObserveのバージョンはv0.12.1。以前やったときはv0.6.0であった。

結論: がんばればちゃんとビルドできるし、クラスタも動くよ。

パッケージ等は以下の通り。

やった(やられた)ことのある人は分かると思うが、nodeのバージョンが変わると結果が大きく変わるので注意が必要。(次の手順で出てくるrustも)

必要なパッケージ: (括弧内は利用したバージョン)

  • protobuf (protobuf-24.4,1)
  • git (git-2.45.2_1)
  • gcc (gcc-13_5)
  • node (node-20.15.1_1)
  • npm (npm-10.8.1 → npm-node20-10.8.1)
  • curl (curl-8.10.0)

ビルドには要らないけど、実行時に必要かもしれないパッケージ:

  • rsyslog
  • nats-server
  • nginx

nightlyのrustを入れておく。sh.rustup.rsはrustup.rsからどうぞ。

$ ./sh.rustup.rs -y --default-toolchain nightly --component rustc cargo
$ /home/user/.cargo/bin/rustc --version
rustc 1.83.0-nightly (9096f4faf 2024-10-05)

なにはともあれOpenObserveをgit cloneして連れてくる。

$ git clone https://github.com/openobserve/openobserve.git
$ git checkout v0.12.1

ビルドする。rustかnpnの誰かの都合で、gcc13を指定しないとうまくいかなかった。(なにかは忘れた)

$ cd openobserve
$ export CC=gcc13
$ export CXX=g++13
$ export PATH=/home/user/.cargo/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
$ cargo build --release

終わり、ではない。Webまわりをビルドしていく。

まずはpackage.jsonからtest関連でcypressを消し、rollupにwasmを使わせる。変更後のdiffはこんな感じ。

$ diff --context web/package.json.orig web/package.json
*** web/package.json.orig       Sun Oct  6 15:24:20 2024
--- web/package.json    Mon Oct  7 08:38:47 2024
***************
*** 14,21 ****
      "copy": "cd dist && mkdir src && cd src && mkdir assets && cd .. && cd .. && cp -r src/assets/* dist/src/assets/",
      "test:unit": "vitest --environment jsdom --root src/",
      "test:unit:coverage": "vitest --coverage",
-     "test:e2e": "start-server-and-test preview :4173 'cypress run --e2e'",
-     "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' :4173 'cypress open --e2e'",
      "build-only": "vite build",
      "build-only-alpha1": "vite build --mode=alpha1",
      "build-only-cloud-prod": "vite build --mode=production",
--- 14,19 ----
***************
*** 62,69 ****
      "vuex": "^4.1.0"
    },
    "devDependencies": {
-     "@cypress/vue": "^6.0.1",
-     "@cypress/webpack-dev-server": "^3.10.0",
      "@quasar/vite-plugin": "^1.7.0",
      "@rushstack/eslint-patch": "^1.10.3",
      "@types/axios": "^0.14.0",
--- 60,65 ----
***************
*** 84,95 ****
      "@vue/tsconfig": "^0.5.1",
      "autoprefixer": "^10.4.19",
      "c8": "^10.1.2",
-     "cypress": "^13.13.0",
-     "cypress-localstorage-commands": "^2.2.6",
      "dotenv": "^16.4.5",
      "eslint": "^8.0.0",
      "eslint-config-prettier": "^9.1.0",
-     "eslint-plugin-cypress": "^3.3.0",
      "eslint-plugin-vue": "^9.27.0",
      "fs-extra": "^11.2.0",
      "happy-dom": "^14.12.3",
--- 80,88 ----
***************
*** 110,115 ****
      "vitest": "^2.0.2",
      "vue": "^3.4.31",
      "vue-tsc": "^2.0.26",
!     "whatwg-fetch": "^3.6.20"
    }
  }
--- 103,112 ----
      "vitest": "^2.0.2",
      "vue": "^3.4.31",
      "vue-tsc": "^2.0.26",
!     "whatwg-fetch": "^3.6.20",
!     "@rollup/wasm-node": "^4.24.0"
!   },
!   "overrides": {
!     "rollup": "npm:@rollup/wasm-node"
    }
  }

npm installして、ビルドする。ここでもCCとCXXを指定する。

$ cd web
$ export CC=gcc13
$ export CXX=g++13
$ npm i
$ npm run build-only

これでビルドできた。あとは動かそう。

nginx.conf: (注意: これは "動けばいい" という設定で、セキュリティとか気にしてない)

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include mime.types;

    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name openobserve.local;

        location / {
            proxy_pass http://127.0.0.1:5080;
        }

        location /assets {
            alias /home/user/openobserve/web/dist/assets;
            index index.html;
        }

        location /web/src/assets {
            alias /home/user/openobserve/web/src/assets;
            index index.html;
        }

        location /web {
            root /home/user/openobserve/web/dist;
            rewrite ^(.*)$ /index.html break;
        }
    }
}

nats.conf: (注意: これは4台のクラスタ用設定。適宜調整してね。)

listen: localhost:4222  # host/port to listen for client connections
http: localhost:8222    # HTTP monitoring port
syslog: true
server_name: openobserve1

cluster {
  name: openobserve
  listen: 0.0.0.0:4244
  advertise: 10.0.0.1:4244
  routes = [
    nats://10.0.0.1:4244
    nats://10.0.0.2:4244
    nats://10.0.0.3:4244
    nats://10.0.0.4:4244
  ]
}

jetstream {
   store_dir=/nats-storage
}

nats用のストレージを準備する。

$ sudo mkdir /nats-storage
$ sudo chown nats:nats /nats-storage

nginxとnatsを起こす。

$ sudo sysrc nginx_enable=YES nats_enable=YES
$ sudo service start nginx
$ sudo service start nats

これで最後、openobserveを起動する。環境変数は参考程度で、特にクラスタ用(minio+MariaDB利用)になってるので注意。

$ export ZO_LOCAL_MODE="false"
$ export ZO_LOCAL_MODE_STORAGE="s3"
$ export ZO_GRPC_ORG_HEADER_KEY="myfirstopenobserve"
$ export ZO_TELEMETRY="false"
$ export ZO_PROMETHEUS_ENABLED="true"
$ export ZO_CLUSTER_COORDINATOR="nats"
$ export ZO_META_STORE="mysql"
$ export ZO_META_MYSQL_DSN="mysql://openobserve:weakpassword@10.0.0.1/openobserve"
$ export ZO_ROOT_USER_EMAIL="root@localhost.local"
$ export ZO_ROOT_USER_PASSWORD="weakpassword"
$ export ZO_S3_SECRET_KEY="password1234"
$ export ZO_S3_REGION_NAME="any"
$ export ZO_S3_BUCKET_NAME="openobserve"
$ export ZO_S3_ACCESS_KEY="00000000000000000000"
$ export ZO_S3_SERVER_URL="http://minio1.local:9000"
$ export ZO_S3_PROVIDER="minio"
$ export ZO_INGEST_ALLOWED_UPTO="10000000"
$ daemon -cfS -R 15 -T openobserve /home/user/openobserve/target/release/openobserve

あとはブラウザからアクセスすれば見えるはず。ログインユーザとパスワードはZO_ROOT_USER_EMAILとZO_ROOT_USER_PASSWORDで指定したもの。

動くといいね!