驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
skywalking 6.0 GA 版本安装记录和踩坑记录本
/    

skywalking 6.0 GA 版本安装记录和踩坑记录本

相关资料

数据仓库:ElasticSearch 的安装

基本安装

  1. 因为elasticsearch 不允许root账户登录,所以登录非 root 账户。
  2. 根据上述地址下载 Elasticsearch 6.X 版本。
  3. 下载完成后对/config/elasticsearch.yml非常简单的修改
# cluster.name: XXX # 此处随意,不写也是可以的
network.host: 10.5.21.27 # 此处最好不要写127.0.0.1,改为实际的 ip
# http.port: 9200 # 根据自己的实际要求修改
  1. 通过控制台启动 elasticsearch
cd xxx/elasticsearch-6.6.1
./bin/elasticsearch

此处没有做集群,如果有需要请根据文档做集群处理。

启动过程中,查看控制台是否出现问题,如果有问题,请对照下述的问题解决方案进行处理,处理完成后,通过后台方式启动。

# 后台启动
sh /mic-project/elasticsearch-6.6.1/bin/elasticsearch -d -p pid
# 杀掉进程
kill `cat pid`

测试是否成功

安装成功后可以通过:http://10.5.21.27:9200/进行测试,如果如下类似内容则表示启动成功:

{
  "name" : "liuchunfu",
  "cluster_name" : "CollectorDBCluster",
  "cluster_uuid" : "bjje0ZP1SwSHCag8K-ddFQ",
  "version" : {
    "number" : "5.6.14",
    "build_hash" : "f310fe9",
    "build_date" : "2018-12-05T21:20:16.416Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

问题解决

elasticsearch 在 root下无法启动

root权下进行添加用户和分组。

groupadd devgroup   #添加一个分组 devgroup
adduser lcf # 添加一个用户 lcf
passwd lcf #为 lcf修改密码,修改密码也是此指令

# 其他指令参考
useradd -g devgroup newuser  # 此处为新建
usermod -G  groupname username  # 这个会把用户从其他组中去掉

授权文件夹为非 上述构建好的用户

chown -R lcf:devgroup elasticsearch-6.6.1/

其中lcf为用户名,devgroup为分组名。

提示:max file descriptors [4096] for elasticsearch process is too low, increase to at least

vi /etc/security/limits.conf
然后在后面添加
* soft nofile 65536
* hard nofile 131072

提示:[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

切换到root用户修改配置sysctl.conf

# 修改配置文件
vi /etc/sysctl.conf 
# 添加配置后跳出 vim
vm.max_map_count=6553601
# 执行
sysctl -p1

数据接收和展示:Collecotr 和 UI

基本安装

  1. 根据上述地址下载Skywalking 6.0 GA版本后,解压
  2. 目录结构如下所示
├── .....
├── agent
├── bin
│   ├── collectorService.bat
│   ├── collectorService.sh
│   ├── startup.bat
│   ├── startup.sh
│   ├── webappService.bat
│   └── webappService.sh
|── ......
├── config
│   ├── application.yml
│   ├── component-libraries.yml
│   └── log4j2.xml
├── .....
├── logs
│   ├── collector.log
│   ├── skywalking-collector-server.log
│   ├── webapp-console.log
│   └── webapp.log
└── webapp
    ├── skywalking-webapp.jar
    └── webapp.yml

上述列表是比较重要的东西,我们依次来说

  • agent 这个目录是 jar包启动的时候需要的,通过-agent进行指定
  • bin目录下的startup.sh用于启动2个服务
    • collecotr 的服务
    • ui显示界面的服务。
  • config(同级)这个目录下的配置文件application.yml作用如下
    • 配置collecotr的启动ip 和端口
    • 配置storage的信息,就是elasticsearch的信息
  • logs 是日志目录,包含了
    • Collector 的日志
    • ui应用的日志。
  • webapp 下面有2个文件
    • skywalking-webapp.jar:ui界面服务的 jar 包
    • webapp.yml:配置文件,里面主要是graphql的配置【此处可能有坑】

综上我们根据是否属于代理分为2类:

  • agent类:只有 agent 这个目录下的文件
  • 综合管理类:ui和收集器。
  1. 修改config/application.yml下的文件,默认的配置中通过${...}做了一些引用变量,我的服务器环境死活启动不了,所以进行了修改,部分配置如下,未列出的都是没有进行修改的:
...
cluster:
  standalone:
core:
  default:
    restHost: 10.5.21.27
    restPort: 12800
    restContextPath: /
    gRPCHost: 10.5.21.27
    gRPCPort: 11800
    downsampling:
    - Hour
    - Day
    - Month
    recordDataTTL: 90 # Unit is minute
    minuteMetricsDataTTL: 90 # Unit is minute
    hourMetricsDataTTL: 36 # Unit is hour
    dayMetricsDataTTL: 45 # Unit is day
    monthMetricsDataTTL: 18 # Unit is month
storage:
 elasticsearch:
   clusterNodes: 10.5.21.27:9200
   indexShardsNumber: 2
   indexReplicasNumber: 0
   bulkActions: 2000 # Execute the bulk every 2000 requests
   bulkSize: 20 # flush the bulk every 20mb
   flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests
   concurrentRequests: 2 # the number of concurrent requests
......
  1. 跳转到 bin路径并启动,这个脚本启动了2个模块:一个收集器和一个 UI 界面。
cd bin
sh startup.sh

通过上述命令即可启动:collecot服务ui 界面服务

  1. 通过路径http://10.5.21.27:8080/查看是否出现登录界面,默认的用户名密码是:admin admin

通常情况下,都会有问题,骚年,我们来一个一个解决问题吧!

启动界面报错500

错误的解决方法第一步就是查看日志,日志在logs目录下

webapp.log # UI控制启动的日志
skywalking-oap-server.log
oap.log

遇到问题依次打开一个一个分析。

我遇到一个典型错误是在webapp.log中提示:通过zuul无法访问127.0.0.1

org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:10800 [/127.0.0.1] failed: 拒绝连接 (Connection refused)
...
com.netflix.zuul.exception.ZuulException: Forwarding error
	at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:189)
	at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:164)
	at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111)

我是通过修改webapp.yml中的 listOfServers进行解决的,我的配置如下所示:

server:
  port: 8080

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    listOfServers: 10.5.21.27:12800 #此处修改为固定 ip,不为127.0.01
    
security:
  user:
    admin:
      password: admin

如果你懂 Zuul,你应该可以猜到此处引入此组件的目的是为了负载均衡。

客户端代理:agent

实际开发时候,每一个 jar包获取应用都应该单独使用一个 agent,所以将agent 这个目录拷贝到各自对应的 jar包路径下。

核心部分的目录信息如下:

├── activations
├── config
│   └── agent.config
├── logs
│   └── skywalking-api.log
├── optional-plugins
├── plugins
└── skywalking-agent.jar

其中 config/agent.config是最重要的,需要修改的核心参数如下所示

# 应用名称,当前代理的应用名称,用于 UI界面分类和展示
agent.application_code=Mic-APM
# 收集器的地址,这个根据实际情况设置,上述`Collector`在哪台服务器启动,ip就设置为多少。
collector.servers=10.5.21.27:11800

设置好参数后,对于 Java 应用,添加核心的-javaagent进行启动

java -javaagent:agent/skywalking-agent.jar -jar xxx.jar

简单的架构图

yum install GeoIP-devel

整体设计如上所示。