在CenterOS搭建ELK日志监控分析平台
准备环境
确保你的 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
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>
同时从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
}
}
集成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:""}
编译
# 在解压目录下而不是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
判断是否启动成功
打开目录/home/skywalking/dist-material/logs
查看日志即可
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ALLBS!
评论