安装Skywalking
SkyWalking是一个针对分布式系统的应用性能监控(Application PerformanceMonitor,APM)和可观测性分析平台(Observability Analysis Platform),可用于对程序进行监控,包含多种语言的 agent。 作为 Apache 顶级项目,同时创始人吴晟又是首位Apache 软件基金会中国董事,整个项目紧跟时代的步伐,保持不侵入代码且不影响应用性能的做法,一方面接入变得简单了,另一方面可扩展性也变强了。对于数据存储的支持也比较广泛,有默认的内存数据库 HB,关系型数据库MySQL, TiDB等,但从目前看,官方更为推荐的是 Elasticsearch。另外对 Service Mesh等云原生的支持方面也是非常好的。
Skywalking 拓扑图演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 安装 Docker sudo curl -sSL https://get.docker.com/ | sh sudo systemctl start docker sudo usermod -aG docker $USER # 镜像加速: /etc/docker/daemon.json {"registry-mirrors":["https://hub-mirror.c.163.com/"]} # 重启生效 sudo systemctl daemon-reload sudo systemctl restart docker # 安装 Elasticsearch docker pull elasticsearch:7.12.0 # 系统配置 sudo vi /etc/sysctl.conf vm.max_map_count=262144 sudo sysctl -p # 准备数据和日志目录用于持久化 mkdir -p elasticsearch/data mkdir -p elasticsearch/logs # 启动服务,请将 xxx 替换为你的用户名 docker run -d --name=es7 \ --restart=always \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -v /home/xxx/elasticsearch/data:/usr/share/elasticsearch/data \ -v /home/xxx/elasticsearch/logs:/usr/share/elasticsearch/logs \ elasticsearch:7.12.0 |
Elasticsearch 添加密码:
1 2 3 4 5 6 |
# 配置文件elasticsearch.yml,设置后应重启服务 xpack.security.enabled: true # 设置密码 docker exec -it es7 /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive # 命令行修改 curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }' |
常见问题
1、Could not rename log file ‘logs/gc.log’ to ‘logs/gc.log.11’ (Permission denied).
据网上说 docker compose 安装方式应添加
1 |
TAKE_FILE_OWNERSHIP=true |
经测试7.x需该配置,直接按照官方文档操作即可,但这样需要建立多个容器,如果机器资源紧张就会有些问题。如果只部署单个容器,可不映射log 目录,将 data 目录进行持久化,持久化也可选择创建本地 volume的方式来进行映射。
安装 Skywalking
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 安装 oap docker pull apache/skywalking-oap-server:8.5.0-es7 # 启动服务 docker run -d --name oap --restart always \ -e TZ=Asia/Shanghai \ -p 12800:12800 \ -p 11800:11800 \ --link es7:es7 \ -e SW_STORAGE=elasticsearch7 \ -e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 \ #-e SW_ES_USER=elastic \ #-e SW_ES_PASSWORD=xxxxx \ apache/skywalking-oap-server:8.5.0-es7 # 安装 ui docker pull apache/skywalking-ui:8.5.0 # 启动 docker run -d --name skywalking-ui \ --restart=always \ -e TZ=Asia/Shanghai \ -p 8080:8080 \ --link oap:oap \ -e SW_OAP_ADDRESS=oap:12800 \ apache/skywalking-ui:8.5.0 |
Skywalking 服务端设置认证SW_AUTHENTICATION,Agent 端配置连接认证SW_AGENT_AUTHENTICATION
注:位于同一台主机上的 docker 容器–link关联后可不对外开放端口即可实现连接,如上例中的 Elasticsearch,也可单独为这些容器创建一个网络:
1 2 3 4 |
docker network create custom-network docker... --network=custom-network ... |
源代码:https://archive.apache.org/dist/skywalking/8.5.0/
agent 位置:apache-skywalking-apm-bin/agent/skywalking-agent.jar,可以像下例中那样使用环境变量,也可以通过指定配置文件启动:–Dskywalking_config=xxx/agent.config,配置文件的位置:apache-skywalking-apm-bin/agent/config/agent.config
Java 项目添加 Agent部署参考链接:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
截取重要信息如下:
1 2 3 4 5 6 7 8 9 10 11 |
SkyWalking Agent 配置 export SW_AGENT_NAME=demo-application # 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 `spring.application.name` 。 export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 配置 Collector 地址。 export SW_AGENT_SPAN_LIMIT=2000 # 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕。 export JAVA_AGENT=-javaagent:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar # SkyWalking Agent jar 地址。 # Jar 启动 java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar @ 直接指定参数 java -javaagent:/skywalking-agent.jar -Dskywalking.agent.service_name=xxx -Dskywalking.collector.backend_service=xxx:11800 -jar xxx.jar |
docker-maven-plugin 文档:https://dmp.fabric8.io/,使用 Docker 打包时如仅打包skywalking-agent.jar文件则仅在Instance 下出现数据,原因是未添加 plugins 文件,要添加 plugins 文件一种是将整个agent文件夹全量(可选择性地去除掉一些jar包,同时bootstrap-plugins和optional-plugins均为可选插件,需手动配置开启,可不进行拷贝)添加到容器内:
1 2 3 4 5 6 7 |
<resources> ... <resource> <targetPath>/agent</targetPath> <directory>${basedir}/agent</directory> </resource> </resources> |
也可以通过将 agent 目录放到服务器指定目录,通过建立 volume 映射的方式包含skywalking-agent.jar及plugins
本地调试则可以直接通过 IDEA 配置相关参数环境变量
Netdata 安装
Netdata是一款配置简单,监控参数详尽且界面美观易用的监控工具。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
docker run -d --name=netdata \ -p 19999:19999 \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /etc/passwd:/host/etc/passwd:ro \ -v /etc/group:/host/etc/group:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ -v /etc/os-release:/host/etc/os-release:ro \ --restart unless-stopped \ --cap-add SYS_PTRACE \ --security-opt apparmor=unconfined \ netdata/netdata |
可通过19999端口直接访问(默认无需账号登录,请设置 IP 访问限制或禁用端口),同时为管理多台主机,可在Netdata云端注册一个免费账号,配置 Namespace并添加主机(claim node),如通过 Docker 安装请选择 docker 命令。
默认所显示的名称并不友好
1 2 3 4 5 6 7 |
docker exec -it netdata bash cd /etc/netdata ./edit-config netdata.conf [global] hostname = xxx |
配置完成后需重启服务/容器,此时就会显示更为友好的名称了。有关数据存储的配置请见:
https://learn.netdata.cloud/docs/agent/database/engine/