ELK 搭建 & 日志集成

ELK 搭建 & 日志集成

背景

最近在弄skywalking,微服务的链路已经能够正常在skywalking里显示了,所以想着将日志也和skywalking结合。虽然公司的日志是用ELK的,但是目前是我自己测试阶段,所以就想着自己先搭建一个ELK,顺便练习一下ELK搭建的过程。

只是ELK的搭建和日志的简单集成,并不涉及高端知识,大佬请绕道

环境

CentoOS7

前置工作

前提要一个干净的环境。只需要一个正常可以访问的网络。如果你搭建环境已经包含前置工作中的必要内容,那么可以直接跳过。

更换系统源

更换的原因是: 无法获取镜像列表。

1. 备份原有源文件
bash 复制代码
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2. 选择新的源

以腾讯源为例,你可以下载腾讯的 CentOS 7 源配置文件:

bash 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
3. 更新 yum 缓存
bash 复制代码
yum makecache
4. 更新系统软件包列表
bash 复制代码
   sudo yum update

安装 net-tools 软件包

原因: ifconfig 命令包含在 net-tools 软件包中。

bash 复制代码
yum install net-tools

安装 vim 软件包

bash 复制代码
sudo yum install vim

安装 telnet 软件包

bash 复制代码
sudo yum install 

安装 lrzsz

"sz" 命令通常用于在 Linux 系统中通过串口或 SSH 连接将文件从服务器下载到本地。

bash 复制代码
sudo yum install lrzsz

安装 wget

bash 复制代码
sudo yum install wget

关闭防火墙

临时关闭:

bash 复制代码
   systemctl stop firewalld.service

永久关闭:

bash 复制代码
   systemctl disable firewalld.service

先执行临时的再执行永久的,只执行永久的不好使,因为永久的要再下次开机才生效。

安装java环境

bash 复制代码
sudo yum install java-1.8.0-openjdk

根据端口号查找pid

bash 复制代码
sudo netstat -tunlp | grep 7071

将服务器时间改成上海时间

1. 安装 ntpdate 工具
bash 复制代码
   sudo yum install ntpdate
2. 设置成上海时区
bash 复制代码
   sudo timedatectl set-timezone Asia/Shanghai
3. 同步时间
bash 复制代码
   sudo ntpdate time.windows.com

CentOS 搭建ELK

到这里就可以开始真正的搭建ELK了

ELK的关系

图是百度图片上找的,仅用于学习用途,侵权联系我,删。

安装Elasticsearch

bash 复制代码
# 这条命令的作用是导入 Elastic 软件库的 GPG 密钥。
# GPG 密钥用于验证软件包的完整性和来源的可靠性,确保您从可信的来源获取和安装软件。通过导入这个密钥,系统可# 以确认您即将安装的 Elastic 相关软件包是经过官方认证且未被篡改的。
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vim /etc/yum.repos.d/elasticsearch.repo
# 在文件中添加以下内容
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
​
sudo yum install elasticsearch
修改 Elasticsearch 配置文件
bash 复制代码
vim /etc/elasticsearch/elasticsearch.yml
# 下面这些内容要对齐
cluster.name: my_elasticsearch_cluster # 自定义一个
node.name: node-1
network.host: 0.0.0.0 # 表示监听所有网络接口
http.port: 9200
discovery.seed_hosts: ["localhost:9200"]
discovery.type: single-node #以单例es启动
启动 Elasticsearch 服务
bash 复制代码
sudo systemctl start elasticsearch
# 这个命令则是设置 Elasticsearch 服务在系统启动时自动启动
sudo systemctl enable elasticsearch

正常启动之后可以访问:http://localhost:9200

安装Logstash

bash 复制代码
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vim /etc/yum.repos.d/logstash.repo
# 在文件中添加以下内容
[logstash-7.x]
name=Logstash repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

sudo yum install logstash
创建logstash.conf配置文件
bash 复制代码
touch /etc/logstash/conf.d/logstash.conf
vim /etc/logstash/conf.d/logstash.conf

带注释版本:

bash 复制代码
input {  // 输入部分
  file {  // 使用文件作为输入源
    path => "/data/log/service/logs/app/*.log"  // 指定要读取的日志文件路径
    type => "system_log"  // 为输入的日志定义一个类型标签
  }
}
​
filter {  // 过滤部分
  if [type] == "system_log" {  // 如果输入的日志类型是"system_log"
    grok {  // 使用 grok 插件进行解析
      match => { "message" => "%{COMBINEDAPACHELOG}" }  // 尝试按照指定的模式解析"message"字段
    }
  }
}
​
output {  // 输出部分
  elasticsearch {  // 输出到 Elasticsearch
    hosts => ["localhost:9200"]  // 指定 Elasticsearch 的主机和端口
    index => "logstash-%{+YYYY.MM.dd}"  // 定义输出的索引名称,使用日期作为后缀
  }
  stdout { codec => rubydebug }  // 同时将处理结果输出到标准输出,使用 rubydebug 编码格式
}

这个是直接粘贴的版本:

bash 复制代码
input {
 file {
  path => "/data/log/service/logs/app/*.log"
  type => "system_log"
 }
}
filter {
 if [type] == "system_log" {
  grok {
   match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
 }
}
output {
 elasticsearch {
  hosts => ["localhost:9200"]
  index => "logstash-%{+YYYY.MM.dd}"
 }
 stdout { codec => rubydebug }
}
启动logstash服务
bash 复制代码
sudo systemctl start logstash 
sudo systemctl enable logstash

是否正常启动去看日志,我的是在:/var/log/logstash

安装kibana

bash 复制代码
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vim /etc/yum.repos.d/kibana.repo
# 在文件中添加以下内容
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
​
sudo yum install kibana
修改kibana配置文件
bash 复制代码
vim /etc/kibana/kibana.yml
# 下面配置对齐
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
i18n.locale: "zh-CN"
启动kibana服务
bash 复制代码
sudo systemctl start kibana
sudo systemctl enable kibana

正常启动之后可以访问:http://localhost:5601

kibana 创建索引模式

索引模式要和logstash里的output里对应的索引前缀相同。例如例子的应该对应的索引模式是:logstash-*.

微服务的日志集成

集成微服务

这里对微服务没啥要求(随便放一个jar包运行一下就好了),唯一要求就是日志的输入文件(在项目里的log4j.xml里配置的)要和上面logstash中的input部分对应起来。

调用一下测试接口。

discover 查看日志

我认为一个索引模式是匹配多个索引的,索引是根据logstash的out部分进行传给es的。

索引页:

总结

在centos7上成功搭建了ELK并且正常收集到了来自微服务的日志,以及通过kibana进行正常查询。

计划下一篇写ELK和skywalking链路跟踪的集成。

相关推荐
iQM7518 分钟前
Spring Boot 中实现任务后台处理的几种常见方式
java·spring boot·后端
2401_8576176220 分钟前
创新学生宿舍管理:Spring Boot框架实践
java·spring boot·后端
shall_zhao23 分钟前
Spring异常处理-@ExceptionHandler-@ControllerAdvice-全局异常处理
java·spring
海海不掉头发26 分钟前
【已解决】如何使用JAVA 语言实现二分查找-二分搜索折半查找【算法】手把手学会二分查找【数据结构与算法】
java·开发语言·算法
Data 3171 小时前
关于 SQL 的 JOIN 操作
java·大数据·数据库·数据仓库·sql
BeyondESH2 小时前
C++—单例设计模式
java·c++·设计模式
好奇的菜鸟2 小时前
探索 JUnit 5:下一代 Java 测试框架
java·开发语言·junit
爱吃土豆的程序员2 小时前
Lucene 倒排索引原理详解:深入探讨相关算法设计
java·算法·elasticsearch·全文检索·lucene
林小果12 小时前
桥接模式
java·开发语言·设计模式
MicrosoftReactor3 小时前
技术速递|宣布 Azure Container Apps 上的 Java 体验正式推出
java·azure