准备环境

确保你的 CentOS 系统已经更新到最新版本,并安装了必要的依赖。如果es版本选择8.0以上则jdk至少17以上

sudo yum update -y
sudo yum install -y wget curl vim

Elasticsearch

安装 Elasticsearch

首先,你需要导入 Elasticsearch 的 GPG key,然后添加其仓库

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

创建一个新的 Elasticsearch YUM repository 文件

sudo vim /etc/yum.repos.d/elasticsearch.repo

将以下内容添加到文件中:

[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

现在,你可以安装 Elasticsearch 了

sudo yum install -y elasticsearch

优化 Elasticsearch 内存占用

编辑 Elasticsearch 的配置文件,限制内存占用

sudo vim /etc/elasticsearch/jvm.options

找到以下两行,将堆内存限制在较低的范围内,例如

-Xms1024m
-Xmx1024m

安装并配置分词插件

在这个例子中,我们以中文分词插件 IK 分词器为例

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.7.0/elasticsearch-analysis-ik-8.7.0.zip

移动es到指定目录

mv /usr/share/elasticsearch/ /home
cd /home/elasticsearch/
mkdir data
mkdir logs
mv /var/lib/elasticsearch/* /home/elasticsearch/data

生成证书

./bin/elasticsearch-certutil ca
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

修改配置文件

vim /etc/elasticsearch/elasticsearch.yml

修改内容如下

path.data: /home/elasticsearch/data
path.logs: /home/elasticsearch/logs
node.max_local_storage_nodes: 2
node.name: node-1
network.host: 0.0.0.0
cluster.initial_master_nodes: ["node-1"]
# 开启安全认证
xpack.security.enabled: true
# 开启ssl
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
# 生成ca证书
xpack.security.transport.ssl.keystore.path: /home/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /home/elasticsearch/elastic-certificates.p12

创建对应的用户以启动ES

groupadd es 
# -g 指定组 -p 密码
useradd es -g es -p password 
# -R 处理指定目录以及其子目录下的所有文件
chown es:es -R es安装目录 
chown es:es -R /var/log
chown es:es -R /tmp

切换刚创建的用户并启动 Elasticsearch

su es
./bin/elasticsearch -d

配置密码(多个)

./bin/elasticsearch-setup-passwords interactive

Kibana

安装Kibana

sudo yum install kibana

移动目录

cd /home
mkdir kibana
mv /usr/share/kibana/* /home/kibana/
cd /kibana
mkdir config
mv /etc/kibana/* /home/kibana/config/

修改配置文件

vim /etc/kibana/kibana.yml

增加以下内容

# 服务端口
server.port: 5601
# 服务器ip  本机
server.host: "0.0.0.0"
# Elasticsearch 服务地址
elasticsearch.hosts: ["http://localhost:9200"]
# 设置语言为中文
i18n.locale: "zh-CN"
#设置访问用户
elasticsearch.username: "kibana"
#设置访问密码
elasticsearch.password: "上面es中kibana设置的密码"
xpack.encryptedSavedObjects.encryptionKey: "your_encryption_key"

修改以下内容

pid.file: /home/kibana/kibana.pid

指定用户授权

chown es:es -R /home/kibana/

启动并启用Kibana服务

nohup ./bin/kibana &

# 查看进程对应的pid
netstat -nlp | grep 5601

image-20230419174625061

image-20230419174834712

Logstash

安装Logstash

sudo yum install logstash

移动目录

cd /home
mkdir logstash
mv /usr/share/logstash/* /home/logstash/
mv /etc/logstash/* /home/logstash/

配置Logstash

cd /home/logstash/config
vim config/logstash-es.conf

一个简单的Logstash配置示例

# 收集指定文件的日志
input {
  file {
    path => "/path/to/your/logfile.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
# 指定目录下所有日志文件
input {
  file {
    path => "/path/to/your/log-directory/*.log"
    start_position => "beginning"
    sincedb_path => "/path/to/sincedb/file"
  }
}
# 使用api收集
input {
  tcp {
    port => 9601
    codec => json_lines
  }
}

filter {
  # Add your filters here
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    user => "your_username"
    password => "your_password"
  }
}

start_position 参数表示 Logstash 应从文件的哪个位置开始读取,beginning 表示从文件开头开始。sincedb_path 参数可以指定一个文件路径来记录已经处理过的文件位置。您可以选择一个目录以存储这些 sincedb 文件,以便在 Logstash 重新启动时,它可以记住上次处理到的文件位置。设置为 /dev/null 以确保每次启动 Logstash 时都从头开始读取。

安装插件

vim Gemfile

将其中source "https://rubygems.org"修改为
source "https://gems.ruby-china.com"

./bin/logstash-plugin install logstash-codec-json_lines

找不到源改为本地安装

插件库

# 修改Gemfile
gem "logstash-codec-json_lines", :path => "./logstash-codec-json_lines"

# 执行安装
./bin/logstash-plugin install --no-verify

指定用户授权

chown es:es -R /home/logstash/

启动Logstash服务

nohup ./bin/logstash -f ./config/logstash-es.conf &

配置防火墙

如果CentOS系统启用了防火墙,需要打开Elasticsearch和Kibana使用的端口并且在云主机上安全组中相应配置这两个端口

sudo firewall-cmd --add-port=9200/tcp --permanent
sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --add-port=9601/tcp --permanent
sudo firewall-cmd --reload

在java中使用

添加依赖

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.3</version>
</dependency>

修改logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--logstash ip:指定的logstash端口也就是上面的9601-->
        <destination>部署ip:9601</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <!--引用springboot默认配置-->
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <root level="INFO">
        <!--使用上述订阅logstash数据tcp传输 -->
        <appender-ref ref="LOGSTASH" />
    </root>

</configuration>

image-20230420095538962

image-20230420100215408

image-20230420100751445

同时从api和本地收集日志,并且指定到不同的索引中

input {
  tcp {
    port => 9601
    codec => json_lines
	type => "java_api"
  }
}
input {
  file {
    path => "需要收集日日志的目录/*"
    start_position => "beginning"
    sincedb_path => "/dev/null"
	type => "java_local"
  }
}
output {
  if [type] == "java_api" {
    elasticsearch {
		hosts => ["localhost:9200"]
		index => "java_api-%{+YYYY.MM.dd}"
		user => "elastic"
		password => "你的密码"
	  }
  }
  if [type] == "java_local" {
    elasticsearch {
		hosts => ["localhost:9200"]
		index => "java_local-%{+YYYY.MM.dd}"
		user => "elastic"
		password => "你的密码"
	  }
  }
  stdout {
  	codec => rubydebug
  }
}

image-20230420110705716

集成skywalking

下载

https://www.apache.org/dyn/closer.cgi/skywalking/9.4.0/apache-skywalking-apm-9.4.0-src.tgz

解压并移动到指定目录

tar -zxvf apache-skywalking-apm-9.4.0-src.tgz

# 移动文件
mv /home/skywalking/apache-skywalking-apm-9.4.0/* /home/skywalking/

配置 SkyWalking

编辑 SkyWalking 的配置文件 /home/skywalking/oap-server/server-starter/src/main/resources/application.yml,根据实际情况修改 storage 配置。例如,如果你打算使用 Elasticsearch 作为存储后端,你需要修改以下内容:

storage:
  selector: ${SW_STORAGE:elasticsearch}
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:"<your-namespace>"}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:<elasticsearch-cluster-nodes>}
    user: ${SW_ES_USER:""}
    password: ${SW_ES_PASSWORD:""}

image-20230420150417774

编译

# 在解压目录下而不是bin目录下,确保环境中java版本>=11,maven版本>=3.6
cd /home/skywalking
mvn wrapper:wrapper
./mvnw clean package -Dmaven.test.skip

启动 SkyWalking

cd /home/skywalking/dist-material/bin/
./startup.sh

image-20230420150852305

判断是否启动成功

打开目录/home/skywalking/dist-material/logs查看日志即可