本頁面網址: https://hackmd.io/@estraining/DevOpsDaysTaipei2022
講者: 喬叔 (Joe Wu)
Facebook 粉絲頁: 喬叔 - Elastic Stack 技術交流
這份文件,已於 2023.09 將版本從 8.4.1 更新至 8.9.0。
請先在電腦中安裝以下所需的執行環境:
這次的工作坊,使用的是 Elastic 在 GitHub 所提供的 apm-integration-testing 開源專案。
因為在操作時會需要 build Docker image 以及下載一些 Elastic Stack 的 Docker images,為了避免工作坊的時間被佔用在處理 build & download,建議請大家先完成以下的步驟。
可使用 git clone
的指令,或是直接下載 Zip 壓縮檔。
git clone https://github.com/joecwu/apm-integration-testing.git
有以下兩種選擇,自行 build 或是直接抓喬叔準備好的 docker images.
2-1. 自行 build:
在專案的根路徑下,執行以下 compose.py build
的指令,以建立及下載所需要使用到的 Docker images:
Mac or Linux:
./scripts/compose.py build --release --with-opbeans-java --with-opbeans-ruby --with-opbeans-python --with-opbeans-go --with-opbeans-node --with-opbeans-rum --with-filebeat --with-metricbeat --with-heartbeat 8.9.0
Windows:
python .\scripts\compose.py build --release --with-opbeans-java --with-opbeans-ruby --with-opbeans-python --with-opbeans-go --with-opbeans-node --with-opbeans-rum --with-filebeat --with-metricbeat --with-heartbeat 8.9.0
2-2. 直接使用喬叔 build 好的 docker image
Mac M1:
docker-compose -f ./docker-compose-arm64.yml pull
有一些 opbeans 的 docker base image,是使用 AMD64 所建置,所以使用 Mac M1 或 M2,請開啟 Rosetta 以正常模擬 AMD64 的執行環境來運行這些 Containers。
Linux:
docker-compose -f ./docker-compose-linux.yml pull
Linux 版本還保持在 8.4.1 ,若要使用 8.9.0 請自行 build。
Windows:
docker-compose -f ./docker-compose-windows.yml pull
Window 版本還保持在 8.4.1 ,若要使用 8.9.0 請自行 build。
其他平台
其他平台需自行 build,否則 opbeans-go
和 opbeans-rum
會無法成功執行。
使用 docker images
指令,確認有存在下列 Docker Images.
使用自行 build,請用:docker-compose up -d
若是使用另外的 yml 檔,請指定 -f
參數:docker-compose -f ./docker-compose-linux.yml up -d
請確認 containers 都能正常運作 (狀態為 healthy
),若有問題,可先參考 FAQ
docker-compose up -d
並使用 docker ps
確認 containers 都有正常的運作:
可以透過 http://localhost:5601 存取 Kibana,確認 Elastic Stack 服務有正常啟動。
登入帳密為
admin
與changeme
若遇到任何問題,歡迎透過 FB 粉絲頁 喬叔 - Elastic Stack 技術交流 與我聯繫。
composer.py
時 Docker build 出現 GPG error
docker 出現 GPG error: At least one invalid signature was encountered 相關問題及解決辦法。
There are a few reasons why you encounter these errors:
There might be an issue with the existing cache and/or disc space. In order to fix it you need to clear the APT cache by executing: sudo apt-get clean and sudo apt-get update.
The same goes with existing docker images. Execute: docker image prune -f and docker container prune -f in order to remove unused data and free disc space.
If you don’t care about the security risks, you can try to run the apt-get command with the –allow-unauthenticated or –allow-insecure-repositories flag. According to the docs:
Ignore if packages can’t be authenticated and don’t prompt about it. This can be useful while working with local repositories, but is a huge security risk if data authenticity isn’t ensured in another way by the user itself.
Finally, on MacOS, where Docker runs inside a dedicated VM, you may need to increase the disk available to Docker from the Docker Desktop application (Settings -> Resources -> Advanced -> Disk image size).
執行以下指令會將你的 Docker 環境清空,包含 images, dangling build caches, containers,請確認後再操作。
docker container prune
docker image prune -a
docker system prune
docker system df
查看 docker-compose logs {container_name}
時,發現以下的錯誤:
exec /usr/bin/dumb-init: exec format error
這代表該 Docker Image 不是用對應的 platform 所建置,需自行 build imgae 才能使用。
unhealthy
的錯誤ERROR: for opbeans-node Container "907fc7a0c9be" is unhealthy.
ERROR: for opbeans-load-generator Container "24e4d86c54ed" is unhealthy.
ERROR: Encountered errors while bringing up the project.
Traceback (most recent call last):
File "/Users/joecwu/projects/joecwu/apm-integration-testing/./scripts/compose.py", line 31, in <module>
main()
File "/Users/joecwu/projects/joecwu/apm-integration-testing/./scripts/compose.py", line 17, in main
setup()
File "/Users/joecwu/projects/joecwu/apm-integration-testing/scripts/modules/cli.py", line 213, in __call__
self.args.func()
File "/Users/joecwu/projects/joecwu/apm-integration-testing/scripts/modules/cli.py", line 590, in start_handler
self.build_start_handler("start")
File "/Users/joecwu/projects/joecwu/apm-integration-testing/scripts/modules/cli.py", line 782, in build_start_handler
self.run_docker_compose_process(docker_compose_cmd + up_params)
File "/Users/joecwu/projects/joecwu/apm-integration-testing/scripts/modules/cli.py", line 476, in run_docker_compose_process
subprocess.check_call(docker_compose_cmd)
File "/Users/joecwu/.pyenv/versions/3.9.2/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker-compose', '-f', '/Users/joecwu/projects/joecwu/apm-integration-testing/docker-compose.yml', 'up', '-d']' returned non-zero exit status 1.
有可能是當下某一些有相依性的 service 還沒有正常的啟動,可以先重新使用 docker-compose
啟動一次試試,看看是否有改善。
docker-compose up -d
若是依然有服務沒辦法正常啟動,可使用 docker ps -a
查看沒有正常啟動的服務是哪些,並進一步使用 docker logs {{DockerContainerName}}
查看錯誤訊息。
opbeans-dotnet
在 Apple M1 無法啟動使用 docker logs localtesting_8.9.0_opbeans-dotnet
查看,發現以下錯誤:
Failed to resolve full path of the current executable [/proc/self/exe]
在這次 Workshop 中,若是使用 Apple M1,我們先不啟用 opbeans-dotnet
先清除所有正在運作中的 containers,以下方式二擇一:
composer.py
./scripts/compose.py stop
docker-compose
docker-compose down
如果有需要,可以一併刪除已產生的 docker volume.
docker volume rm apm-integration-testing_esdata
docker volume rm apm-integration-testing_pgdata
~/.ssh/config
的參考設定如下:
Host gcptunnel
HostName <my.gcp.host.ip>
IdentityFile ~/.ssh/google_compute_engine <--- yours may differ
User jamie <--- yours probably differs
Compression yes
ExitOnForwardFailure no
LocalForward 3000 127.0.0.1:3000
LocalForward 3001 127.0.0.1:3001
LocalForward 3002 127.0.0.1:3002
LocalForward 3003 127.0.0.1:3003
LocalForward 3004 127.0.0.1:80
LocalForward 5601 127.0.0.1:5601
LocalForward 8000 127.0.0.1:8000
LocalForward 9200 127.0.0.1:9200
LocalForward 9222 127.0.0.1:9222
以上述的例子,設定完成後,執行 ssh gcptunnel
即可將本機的 port 轉接到雲端主機。