下载:wget [https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.4-linux-x86_64.tar.gz](https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.4-linux-x86_64.tar.gz)
解压:tar zxvf elasticsearch-7.17.4-linux-x86_64.tar.gz
重命名:mv elasticsearch-7.17.4 skywalking-elasticsearch
切目录:cd skywalking-elasticsearch
建目录:mkdir data
编辑配置文件:vim config/elasticsearch.yml
结尾加入配置
cluster.name 集群名称
node.name 节点名称
path.data 数据存放位置
path.logs 日志存放位置
http.port 打算只给skywalking用,这里指定个端口
cluster.initial_master_nodes 由于是单点不用管太多,跟node.name一样就行
```java
cluster.name: skywalking
node.name: node-1
path.data: /opt/skywalking-elasticsearch/data
path.logs: /opt/skywalking-elasticsearch/logs
http.port: 19200
cluster.initial_master_nodes: ["node-1"]
```
7. 修改系统配置文件
vim /etc/sysctl.conf
结尾加入配置,vm.max_map_count 限制一个进程可以拥有的虚拟内存大小,这里加大点限制,不然可能会报错
```java
vm.max_map_count=262144
```
使系统生效 sysctl -p
8. 用非root用户启动es
如果没有非root用户,则家用户 useradd sky-es。
9. 赋予目录权限
chown -R sky-es /opt/skywalking-elasticsearch
10. 切换用户 su sky-es
10. 启动 ./bin/elasticsearch -d
# 安装 skywalking
1. 解压 :tar zxvf apache-skywalking-apm-9.1.0.tar.gz
1. 改名: mv apache-skywalking-apm-bin skywalking
1. 切换目录:cd skywalking
1. vim config/application.yml
- selector 指定使用es来存储数据
- namespace es的集群名称
- clusterNodes es的节点地址
```java
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
namespace: ${SW_NAMESPACE:"skywalking"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:19200}
```
6. vim ./webapp/webapp.yml
```java
server:
port: 18080
```
7. 如果需要特定java版本,可以修改jdk的路径,在_RUNJAVA=${JAVA_HOME}/bin/java前面指定jdk位置:
vim ./bin/oapService.sh
8. vim ./bin/webappService.sh
在_RUNJAVA=${JAVA_HOME}/bin/java前面指定jdk位置
第一个:进入目录 /opt/skywalking-elasticsearch
切换用户 su sky-es
启动 ./bin/elasticsearch -d
第二个:进入目录 /opt/skywalking
用root登录
启动 ./bin/startup.sh
9. ./bin/startup.sh 启动
9. 访问 http://127.0.0.1:18080/
# 探针
下载 wget https://dlcdn.apache.org/skywalking/java-agent/8.10.0/apache-skywalking-java-agent-8.10.0.tgz
1. 解压 tar zxvf apache-skywalking-java-agent-8.10.0.tgz
1. 启动微服务加探针(bdcockpit文件夹中的启动命令已经加入,忽略)
java -javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=group1::bdcockpit -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar demoProject.jar
4. 集成gateway
gateway相对来说较为特殊,原因是其基于netty的非阻塞服务,如果需要skywalking支持对gateway的链路追踪,那么需要skywalking的探针文件夹下的文件目录做下修改,即“skywalking-agent”下的文件,将其下的/optional-plugins/apm-spring-cloud-gateway-3.x-plugin-8.10.0.jar文件和apm-spring-webflux-5.x-plugin-8.10.0.jar文件复制到/plugins目录下,链路追踪即可支持gateway。
5. 日志收集: 日志收集指的是微服务打印的日志存入skywalking,在skywalking页面查看代码运行日志。需要将“skywalking-agent”下的/optional-plugins/apm-toolkit-logback-1.x-8.10.0.jar复制到/plugins目录下; <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.10.0</version> </dependency> 由于spring自带了logback依赖,所以无需再加入logback的依赖了。 在resources目录下加入文件logback-spring.xml,并输入以下内容: ```java <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern> </layout> </encoder> </appender> <!-- 配置异步记录 AsyncAppender --> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>1024</queueSize> <neverBlock>true</neverBlock> <appender-ref ref="STDOUT"/> </appender> <!-- skywalking grpc 日志收集 8.4.0版本开始支持 --> <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern> </layout> </encoder> </appender> <!--系统操作日志--> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="ASYNC"/> <appender-ref ref="grpc-log"/> </root> </configuration> ``` 6. 告警功能 在skywalking服务的conf目录下,打开“alarm-settings.yml”,并在最后一行添加“ - http://127.0.0.1:5000/send_mail”,此ip为以上python服务启动的服务器ip。 接口代码: ```java # !/usr/bin/env python # _*_ coding: utf-8 _*_ from flask import Flask, request import smtplib from email.mime.text import MIMEText import time app = Flask(__name__) @app.route("/send_mail", methods=["POST"]) def send_mail(): info = request.json print("#########:",info, type(info)) for i in info: # alter_time = tima.strftime("%Y-%m-%d %H:%M:%S", time.localtime(i["startTime"] / 1000)) alter_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # alert_time = time.strftime content = """ 警告时间:%s 警告类型:%s 服务名称:%s 规则名称:%s 详细内容:%s """ % (alter_time, i["scope"], i["name"], i["ruleName"], i["alarmMessage"]) print(content) # 发送邮件 mail_sever = 'smtp.163.com' mail_user = 'email@163.com' mail_pass = '*******' sender = 'email@163.com' reciver = 'email@163.com' msg = MIMEText(content, "plain", 'utf-8') msg['Subject'] = 'Skywalking告警' msg['From'] = sender msg['To'] = reciver smtp = smtplib.SMTP() smtp.connect(mail_sever) smtp.login(user=mail_user,password=mail_pass) smtp.sendmail(sender,reciver,msg.as_string()) return "成功" if __name__ == "__main__": app.run("0.0.0.0", "5000") ```