linux安装elasticsearch
1.SkyWalking介绍
SkyWalking是一个分布式追踪系统,它分为四部分: 探针、平台后端,、存储和用户界面
SkyWalking 是观察性分析平台和应用性能管理系统。
SkyWalking提供了用于在许多不同情况下观察和监视分布式系统的解决方案。首先,与传统方式一样,SkyWalking提供自动仪器代理服务,例如Java,C#和Node.js。同时,它为Go(尚未),C ++(尚未)提供了手动仪器SDK。此外,由于需要更多的语言,在运行时操作代码的风险,云原生基础架构变得更加强大,SkyWalking可以使用Service Mesher基础设施探针来收集数据以了解整个分布式系统。
通常,它为服务,服务实例,端点提供可观察性功能。
服务,实例和端点的概念如今在任何地方都得到使用,因此让我们先弄清楚它们在SkyWalking中的含义
- 服务。代表一组/一组工作负载以为传入请求提供相同的行为。使用仪器代理或SDK时,可以定义服务名称。或SkyWalking使用您在Istio等平台中定义的名称。
- 服务实例。服务组中的每个工作负载都称为一个实例。像
pods
在Kubernetes中一样,它在OS中不必是单个进程。同样,如果您正在使用乐器代理,则实例实际上是OS中的真实进程。 - 端点。它是特定服务中用于传入请求的路径,例如HTTP URI路径或gRPC服务类+方法签名。
通过使用SkyWalking,您可以在服务和端点之间,每个服务的指标,服务实例和端点之间建立拓扑关系,并设置警报规则。
除了所有这些,您还可以使用Zipkin,Jaeger和OpenCensus从SkyWalking本机代理和SDK进行分布式跟踪。
什么是分布式追踪
1.1基本原理
关于SkyWalking架构设计的基本原则就是:
1)易于维护;
2)可控;
3)基于流;
为了达到此目的,SkyWalking后端提供了如下设计:
1)模块化设计;
2)为客户端提供多种连接方式;
3)集群发现机制;
4)流模式;
5)可切换的存储实现;
一、模块化
SkyWalking收集器(collector)是基于模块化设计,用户可以根据自己的需要,更改或集成收集器的功能。
二、模块
模块定义了一组特性,其中可包括一些技术上的实现(如:grpc/jetty服务器管理)、跟踪分析(如:trace segment或者zipkin span解析器)或聚合特征。总而言之,这些都是由模块来定义和实现的。
每个模块都可以通过Java接口定义自身的服务,而实现类均要实现这些服务。并且这些实现类要根据实现的功能定义所依赖的类有哪些。这意味着,即使是模块的两个不同的实现,也可以依赖于不同的模块。
另外,收集器中的模块化核心会检查启动序列,如果没有发现循环依赖或者依赖项,该核心功能会终止收集器。
收集器会启动所有模块,这些模块在application.yml文件中定义。此文件结构如下:
1)根节点是模块名称,如:cluster,naming;
2)次级节点是此模块的功能实现名称,如:zookeeper是cluster模块;
3)第三级节点是功能实现的属性,如:hostPort和sessionTimeout是zookeeper需要的属性;
三、多连接方式
首先,收集器提供两种类型的连接,也就是两种协议的支持:HTTP和gRPC。
1)在HTTP中命名服务,在后端集群中,返回所有可用的收集器;
2)Uplink服务支持gRPC(主要用于SkyWalking的本地代理)和HTTP,它跟踪和度量收集器。每个客户端只向单个收集器发送监测数据(跟踪和度量)。若连接的收集器断线,,则尝试连接其他的收集器。
客户端lib和收集器集群之间的处理流示例
四、收集器集群发现
当收集器以集群模式运行时,收集器必须以某种方式发现彼此。在默认情况下,SkyWalking使用zookeeper进行协调,并以此作为发现的注册中心。
如此说来,客户端的lib将不会使用zookeeper来查找集群。建议用户不要这样做。因为集群发现机制是可切换的,由模块化核心提供。基于这一点,就打破了可切换的能力。
五、流模式
流模式倾向于轻量级的storm/spark实现,并允许使用api来构建流过程图(DAG),以及每个节点的输入/输出的数据约定。
新模块可以找到并扩展已有的过程图。
在处理过程中有三种情况:
1)同步过程。传统的方法调用。
2)异步过程,基于队列缓冲区的a.k.a批处理过程。
3)远程过程,聚合矩阵收集器,通过这种方式,选择器在节点中定义,以决定如何在集群中找到收集器。(HashCode,Rolling,ForeverFirst是三种支持的方式)
通过这些特性,收集器就像一个流动的网一样运行。通过聚合指标和不依赖于存储实现功能来支持同时编写同样的id。
六、可切换的存储实现
因为流模式负责并发,所以存储实现的职责是提供高速写和组查询。
现在,支持ElasticSearch,也支持H2预览版,同时支持ShardingSphere项目用于MySql关系数据库集群的管理。
七、Web UI
除了收集器设计的原则之外,UI也是SkyWalking中的另一个核心部分。它基于React、Antd和Zuul代理来提供收集器集群发现、查询分派和可视化。
Web UI使用localhost:10800来为收集器集群做命名查询。
2.安装
#1.检查是否安装了Java
[root@nacos ~]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
#如果没有Java环境
yum -y install java
#2.接下来我们安装Elasticsearch
我这里安装的是6.4版本的 Elasticsearch ,最新版本已经更新到7.6.2版本
#注:SkyWalking 6.4.0目前只支持elasticsearch 6.x版本
2.1安装elasticsearch(虚拟机内存3G,处理器2核)
#1.下载elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.g
[root@nacos opt]# ls
apache-skywalking-apm-6.5.0.tar.gz elasticsearch-6.4.0.tar.gz
#2.解压 Elasticsearch 安装包
[root@nacos opt]# tar xf elasticsearch-6.4.0.tar.gz
[root@nacos opt]# cd elasticsearch-6.4.0
修改Linux系统的限制配置,将文件创建数修改为65536个。
1.修改系统中允许应用最多创建多少文件等的限制权限。Linux默认来说,一 般限制应用最多
创建的文件是65535个。但是ES至少需要65536的文件创建数的权限。
2.修改系统中允许用户启动的进程开启多少个线程。默认的inux限制loot用户开启的进程可
以开启任意数量的线程,其他用户开启的进程可以开启1024个线程。必须修改限制数为
4096+.因为ES至少需要4096的线程池预备。
vim /etc/security/limits.conf
#新增如下内容在limits .conf文件中
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
修改系统控制权限,EasticSearch需要开辟- 个65536字节以 上空间的虚拟内存。Linux默认不允许任
何用户和应用程序直接开辟这么大的虚拟内存。
vim /etc/sysctl.conf
#新增如下内容在sysct1.conf文件中,当前用户拥有的内存权限大小
vm.max_map_count=262144
#让系统控制权限配置生效
[root@nacos elasticsearch-6.4.0]# sysctl -p
vm.max_map_count = 262144
建一个用户,用于ElasticSearch启动。
ES在5.x版本之后,强制要求在linux中不能使用root用户启动ES进程。所以必须使用其他用户启
动ES进程才可以。
#创建用户
[root@nacos elasticsearch-6.4.0]# useradd es
#修改上述用户的密码
[root@nacos elasticsearch-6.4.0]# passwd es #密码也是es
#修改elasicsearch目录的拥有者
[root@nacos opt]# chown -R es elasticsearch-6.4.0
#切换到es 用户
[root@nacos opt]# su es
[es@nacos opt]$ cd elasticsearch-6.4.0
[es@nacos elasticsearch-6.4.0]$ ls
bin config lib LICENSE.txt logs modules NOTICE.txt plugins README.textile
[es@nacos elasticsearch-6.4.0]$ cd bin/
[es@nacos bin]$ ./elasticsearch -d #-d参数是后台运行 (内存需要大一点,此处我使用3G,cpu处理器需要2核)
[es@nacos bin]$ cd ../
[es@nacos elasticsearch-6.4.0]$ tail -f logs/elasticsearch.log #查看日志
#查看是否启动成功
[es@nacos elasticsearch-6.4.0]$ curl http://localhost:9200
{
"name" : "XBe2044",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "VJMauWZNTp2BSGw-jq4h_A",
"version" : {
"number" : "6.4.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "595516e",
"build_date" : "2018-08-17T23:18:47.308994Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
2.2安装Skywalking,
分为两个步骤:
●安装Backend后端服务
●安装UI
首先切回到root用户,切换到目录下,解压Skywalking压缩包。
#切换到root用户
[es@nacos elasticsearch-6.4.0]$ su root
Password:
#切换到skywalking目录
[root@nacos elasticsearch-6.4.0]# cd /opt/
#解压压缩包
[root@nacos opt]# tar xf apache-skywalking-apm-6.5.0.tar.gz
[root@nacos opt]# cd apache-skywalking-apm-bin/
[root@nacos apache-skywalking-apm-bin]# ll
drwxrwxr-x. 8 1001 1002 143 Nov 12 21:36 agent #探针
drwxr-xr-x. 2 root root 241 Apr 1 11:51 bin #启动脚本
drwxr-xr-x. 2 root root 186 Apr 1 11:51 config #可对后端服务进行配置
-rwxrwxr-x. 1 1001 1002 28903 Nov 12 21:26 LICENSE
drwxrwxr-x. 3 1001 1002 4096 Apr 1 11:51 licenses
-rwxrwxr-x. 1 1001 1002 31850 Nov 12 21:26 NOTICE
drwxrwxr-x. 2 1001 1002 12288 Nov 12 21:43 oap-libs
-rw-rw-r--. 1 1001 1002 1978 Nov 12 21:26 README.txt
drwxr-xr-x. 2 root root 53 Apr 1 11:51 webapp #存放UI启动的安装包以及文件
#修改配置文件
[root@nacos apache-skywalking-apm-bin]# cd config/
修改Skyalking存储的数据源配置:
cd apache- skywalking-apm-bin
vi config/application.yml
storage: #将它的信息都打开
elasticsearch:
nameSpace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}#配置节点信息,此处只有本地的es
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
# Those data TTL settings will override the same settings in core module.
recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
# Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
我们可以看到默认配置中,使用了H2作为数据源。我们将其全部注释。
#h2:
#driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
#url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
#user: ${SW_STORAGE_H2_USER:sa}
#metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
[root@nacos apache-skywalking-apm-bin]# cd ../webapp/
[root@nacos webapp]# vim webapp.yml
server:
port: 8080 #如果此处端口冲突,将端口修改
[root@nacos apache-skywalking-apm-bin]# cd bin/
[root@nacos bin]# ll
-rwxr-xr-x. 1 1001 1002 1352 Nov 12 21:26 oapService.bat
-rwxr-xr-x. 1 1001 1002 1364 Nov 12 21:26 oapServiceInit.bat
-rwxr-xr-x. 1 1001 1002 1597 Nov 12 21:26 oapServiceInit.sh
-rwxr-xr-x. 1 1001 1002 1367 Nov 12 21:26 oapServiceNoInit.bat
-rwxr-xr-x. 1 1001 1002 1616 Nov 12 21:26 oapServiceNoInit.sh
-rwxr-xr-x. 1 1001 1002 1599 Nov 12 21:26 oapService.sh
-rwxr-xr-x. 1 1001 1002 941 Nov 12 21:26 startup.bat
-rwxr-xr-x. 1 1001 1002 934 Nov 12 21:26 startup.sh
-rwxr-xr-x. 1 1001 1002 1426 Nov 12 21:26 webappService.bat
-rwxr-xr-x. 1 1001 1002 1630 Nov 12 21:26 webappService.sh
[root@nacos bin]# sh startup.sh
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!
#启动成功
[root@skywalking apache-skywalking-apm-bin]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6900/sshd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::8080 :::* LISTEN 9174/java
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 9002/java
tcp6 0 0 ::1:9200 :::* LISTEN 9002/java
tcp6 0 0 127.0.0.1:9300 :::* LISTEN 9002/java
tcp6 0 0 ::1:9300 :::* LISTEN 9002/java
tcp6 0 0 :::22 :::* LISTEN 6900/sshd
tcp6 0 0 :::11800 :::* LISTEN 9158/java
tcp6 0 0 :::12800 :::* LISTEN 9158/java
访问
3.Skywalking基础
3.1 agent探针的使用
agent探针可以让我们不修改代码的情况下,对java应用上使用到的组件进行动态监控,获取运行数据
发送到OAP上进行统计和存储。agent探针在java中是使用java agent技术实现的,不需要更改任何代
码, java agent会通过虚拟机(VM)接口来在运行期更改代码。
Agent探针支持JDK 1.6- 12的版本,Agent探针所有的文件在Skywalking的agent文件夹下。 文件目录
如下;
+-- agent
+-- activations
apm-toolkit-1og4j-1.x- activation. jar
apm-toolkit-1og4j-2.x-activation. jar
apm-toolkit-logback-1.x-activation. jar
//配置文件
+-- config
agent . config
//组件的所有插件
+-- plugins
apm-dubbo-plugin. jar
apm-feign-default-http-9.x. jar
apm-httpClient-4.x-plugin.jar
//可选插件
+-- optional-plugins
apm-gson-2.x-plugin. jar
+-- bootstrap-plugins
jdk-http-plugin.jar
+-- 1ogs
skywalking-agent. jar
#用插件时将插件移至plugins下,插件即可生效
部分插件在使用上会影响整体的性能或者由于版权问题放置于可选插件包中,不会直接加载,如
果需要使用,将可选插件中的jar包拷贝到plugins包下。
由于没有修改agent探针中的应用名,所以默认显示的是Your_ ApplicationName.我们修改下应用名
称,让他显示的更加正确。编辑agent配置文件:
[root@nacos agent]# cd config/
vi agent.config
我们在配置中找到这么一行:20行
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
这里的配置含义是可以读取到SW_AGENT_NAME配置属性,如果该配置没有指定,那么默认名称为
Your AplicationName.这里我们把Your, ApplicationName替换成skywalking_tomcat.
# The service name in UI
agent. service_ name=${SW AGENT NAME:skywalking_tomcat}
然后将tomcat重启:
[root@nacos bin]# sh startup.sh
3.1.1 Linux下Tomcat7和8中使用
1.要使用Skywalking监控Tomcat中的应用,需要先准备一个Spring Mvc项目,在资源中已经提供了打
包好的文件
skywalking_ springmvc-1. 0-SNAPSHOT .war。
以吓是该项目的接口代码:
package com. itcast . controller;
import org. spri ngframework. stereotype . Controller;
import org. springframework . web. bind. annotation. RequestMapping;
import org. springframework . web . bind . annotation . ResponseBody;
@Controller
QRequestMapping("/he11o")
public class HelloController {
@RequestMapping"/sayHe11o")
QResponseBody
public String sayHello(String name){
return "hello world";
}
3.1.2 Windows下Tomcat7和8中使用(了解)
Windows’下只需要修改f tomcat目 录/bin/catalina. bat文件的第一行为:
set "CATALINA OPTS--javaagent:/path/to/skywa1king- agent/skywalking-agent. jar"
3.1.3 Spring Boot中使用
Skywalking与Spring Boot集成提供了完善的支持。
1、首先我们复制-份agent, 防止与tomcat使用的冲突。
cd /usr/1ocal/skywalking/apache-skywalking-apm-bin/
Cp -r agent agent_ boot
vi agent_boot/config/agent.config
修改配置中的应用名为:
# The service name in UI
agent.service.name=${SW_AGENT_NAME:skywalking_ boot}
set “CATALINA_OPTS=… -javaagent:E:\apache-tomcat-8.5.20\skywalking-agent\skywalking-agent.jar”
CATALINA OPTS=”SCATALINA _OPTS-javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA OPTS
[root@nacos bin]# vim catalina.sh
CATALINA OPTS=”SCATALINA _OPTS-javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA OPTSl
[root@nacos conf]# vim server.xml
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
需要接口的调用,当接口调用成功之后,会返回信息,如果接口调用失败,在skywalking中会显示调用接口失败
在拓扑图上就可以看到用户调用服务的拓扑图
当用户调用接口失败时,我们经常会用追踪去进行查询
界面的介绍
服务有异常,就可以查看cpu 内存使用情况
拓扑图(可以查看当前情况调用接口的状态)
追踪
指标对比(出现异常时,对某两个实例进行对比)
对数据库性能的综合指标
[root@192 skywalking]# java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar=agent.service_name=config_springboot -jar skywalking_springboot.jar &
服务方:service注解,添加属性,实现类,暴露什么样的服务,
消费方:对外提供了接口
监控
配置告警信息
[root@nacos config]# vim alarm-settings.yml
metrics-name: service_p90 #oal脚本名称
op: ">" #比较符号
threshold: 1000 #阈值,这里1000是1s(当调用这个接口名称,超过1s就会警告)
period: 10 #10分钟检查一次
count: 3 #返回的次数大于3次,才会告警
silence-period: 5 #5分钟内,忽略相同的告警信息
webhooks:
- http://127.0.0.1/notify/
- http://127.0.0.1/go-wechat/
#做告警信息,还需要改这里的配置
报警信息对照表
4.1 java agent原理
上文中我们知道,要使用Skywalking去监控服务, 需要在其VM参数中添加“一
javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar".这里就
使用到了java agent技术。
Java agent是什么?
Java agent是java命令的一个参数。参数javaagent可以于指定-个jar包。
1.这个jar包的MANIFEST.MF文件必须指定Premain-Class项。
- Premain-Class指定的那个类必须实现premain0)方法。|
当java虚拟机启动时,在执行main函数之前,JVM 会先运行-javaagent所指定jar包内Premain-
Class这个类的premain方法。
如何使用java agent?
使用java agent需要几个步骤:
1.定义一个MANIFEST.MF文件,必须包含Premain-Class 选项,通常也会加入Can-Redefine-Classes和Can-Retransform-Classes选项。
2.创建一个Premain-Class 指定的类,类中包含premain法,方法逻辑由户自己确定。
3.将premain的类和MANIFEST.MF文件打成jar包。
4.使用参数-iavaagent: iar包路径启动要代理的方法。