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链路跟踪的集成。

相关推荐
爱编程的鱼11 分钟前
C# 数据类型||C# 类型转换
java·算法·c#
一键三联啊11 分钟前
ArrayList的subList的数据仍是集合
java·开发语言
前鼻音太阳熊18 分钟前
【Spring Boot 应用开发】-06 自动配置-生成配置元数据
java·spring boot·后端
purrrew19 分钟前
【数据结构_8】栈和队列
java·开发语言·数据结构
汤永红21 分钟前
windows下git bash安装SDKMan报错Looking for unzip...Not found
java·git·sdkman
云惠科技(SEO)40 分钟前
泛目录站群技术架构演进观察:2025年PHP+Java混合方案实战笔记
java·人工智能·搜索引擎
小奏技术1 小时前
Kafka要保证消息的发送和消费顺序性似乎没那么简单
后端·kafka
小五Z1 小时前
Redis--事务
redis·分布式·后端·缓存
Asthenia04121 小时前
线上服务频繁FullGC分析
后端
牛马baby1 小时前
Springboot 自动装配原理是什么?SPI 原理又是什么?
java·spring boot·后端