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で指定したもの。
動くといいね!