skywalking8.0集群+es7.x集群
项目缺少链路监控工具,在考虑效率、代码侵入性、易用性等因素后,决定引入skywalking8.0进行链路监控
首先搭建es集群用于存储skywalking收集的信息
这里准备了三台机器,部署两台skywalking、3个es节点
解压下载好的es7,es7自带jdk
并做好相关配置
#集群名称
cluster.name: skywalking-es
#节点名称
node.name: skywalking-node2
path.data: /usr/skywalking/elasticsearch-7.4.2/data
path.logs: /usr/skywalking/elasticsearch-7.4.2/logs
#允许外网访问
network.host: 0.0.0.0
http.port: 9201
#tcp通信暴露的端口
transport.tcp.port: 9301
#允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
#是否data节点(可操作数据)
node.data: true
#是否可以成为主节点
node.master: true
#种子地址,获取符合选举的主机列表
discovery.seed_hosts: ["192.168.74.75", "192.168.74.76","10.168.74.77"]
#用于引导集群启动的节点
cluster.initial_master_nodes: ["skywalking-node1"]
三个节点除了name不一样,其他都一致
可通过下面命令来查看非注释的配置
more ./elasticsearch.yml | grep ^[^#]
这里再新建一个sky用户,用于启动es和skywalking
useradd sky
chown -R sky /usr/skywalking/
(现在还是root用户)再修改本地配置
vi /etc/security/limits.conf
在末尾(按G可以直达)下面加入这些配置(如果没有的话),不然es启动会报错误,也可以专门为某个用户进行配置
* soft nproc 11000 #表示任何一个用户可以打开的最大的进程数
* hard nproc 11000
* soft nofile 655350 #表示任何一个用户可以打开的最大的文件描述符数量
* hard nofile 655350
然后还需编辑另一个文件
vi /etc/sysctl.conf
在末尾加入如下内容
vm.max_map_count=655360
fs.file-max=655360
并使用sysctl -p进行配置刷新
这时候切换到sky用户进入到es的bin目录,并逐一启动
su sky
./bin/elasticsearch -d
这时候elasticsearch集群已构建成功
然后到skywalking集群
skywalking集群需要一个类似哨兵的角色去协调不同的collector,这里采用为了方便,采用zookeeper单点,放在node1上面
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
下载好后copy一份zoo.cfg添加data和log的路径,并配置其他节点地址
dataDir=/usr/skywalking/zk/apache-zookeeper-3.6.2-bin/data
dataLogDir=/usr/skywalking/zk/apache-zookeeper-3.6.2-bin/logs
server.1=ip1:2888:3888
server.2=ip2:2888:3888
server.3=ip3:2888:3888
quorumListenOnAllIPs=true
并且输出myid
echo “1”> /var/zookeeper/data/myid
进入到bin目录进行启动,其他节点也如法炮制
./zkServer.sh start
如果当前用户没有配置java环境,可以参考如下命令,主要是编辑用户环境变量,设置好后让其生效
vi ~/.bash_profile
export JAVA_HOME=/usr/skywalking/elasticsearch-7.4.2/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source ~/.bash_profile
这时候回到skywalking的配置,
首先要改绑定的grpc绑定的ip
restHost: ${SW_CORE_REST_HOST:0.0.0.0}
restPort: ${SW_CORE_REST_PORT:12800}
restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
再把cluster方式改为zookeeper
cluster:
selector: ${SW_CLUSTER:zookeeper}
# standalone:
# Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+
# library the oap-libs folder with your ZooKeeper 3.4.x library.
zookeeper:
nameSpace: ${SW_NAMESPACE:""}
hostPort: ${SW_CLUSTER_ZK_HOST_PORT:ip1:2181,ip2:2181,ip3:2181}
# Retry Policy
baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3}
然后到storage节点,主要是配置es集群
storage:
selector: ${SW_STORAGE:elasticsearch7}
elasticsearch7:
nameSpace: ${SW_NAMESPACE:"skywalking-index"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.74.75:9201,192.168.74.74:9201,192.168.74.76:9201}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
然后启动对应的3个节点
sh bin/oapService.sh
其中一个节点启动ui sh webappService.sh,配置前需要配置对应的serverlist,在webapp/webapp.yml下配置收集器的地址
如果启动失败,可以查看日志
然后查看es,已有结果
zk也注册上去了
然后就是agent的配置了
在客户端所在机器,copy一份skywalking的agent文件夹,随便放一个地方(如果同一台机器则不用),然后再指定信息启动
-javaagent:/usr/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$module -Dskywalking.collector.backend_service=192.168.74.75:11800,192.168.74.76:11800
此时可以看到整个系统情况
可以查看对应的调用链路情况,进行分析
这里可以配置一些无需采集的断点、监控spirngbean程序
把optioal-plugins里的apm-trace-ignore-plugin-8.0.0.jar copy到 plugins下,并在config下面添加apm-trace-ignore-plugin.config文件
内容为你所要忽略采集的配置(这里的忽略是指不在链路监控列表里面展示,链路调用如果设涉及了还是会出现的)
# 忽略路径数据上传
# 路径匹配规则
# /path/? 单个字符
# /path/* 多个字符
# /path/** 多个字符和多级路径
# 多个规则使用逗号“,”分割
# 具体屏蔽的路径要看采集的路径而定
trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/eureka/apps/**,Lettuce/**,Mysql/JDBI/**}
如果要监控springbean,还可以把optional文件夹下的apm-spring-annotation-plugin-8.0.0.jar加入到config里面
配置,也是在agent的config目录下,对agent.config进行配置
配置mysql信息、实例id信息等等,具体可以查看官网配置示例
这三个分别是每3s采集的样本数、上报sql长度
agent.sample_n_per_3_secs
plugin.mysql.sql_parameters_max_length=200
plugin.mysql.trace_sql_parameters=${SW_MYSQL_TRACE_SQL_PARAMETERS:true}