ELK日志管理

目录

一.ELK简介

1.Elasticsearch

2.Logstash

4.ELK 组件解决的主要问题

5.ELK应用的好处

6.ELK的工作原理

7.ELK的主要应用场景

二.安装部署ELK

1.前期准备

2.安装部署ElasticseaErch 软件

3. 在apache节点上 部署  Logstash

4.安装 kibana

三.实现nginx日志管理


一.ELK简介

ELK Stack:Elasticsearch、Kibana、Beats 和 Logstash | Elastic

通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为ELK stack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单

1.Elasticsearch

一个分布式、RESTful风格的搜索和数据分析引擎。它设计用于实时搜索,可以处理大规模数据的存储和分析。Elasticsearch使用Lucene作为底层的搜索引擎,提供了强大的全文搜索、结构化查询和分析能力。

Elasticsearch 使用 Java 语言开发,是建立在全文搜索引擎 Apache Lucene 基础之上的搜索引擎,Apache Lucene - Welcome to Apache Lucene

Elasticsearch 的特点

  • 实时搜索、实时分析

  • 分布式架构、实时文件存储

  • 文档导向,所有对象都是文档

  • 高可用,易扩展,支持集群,分片与复制

  • 接口友好,支持 json

2.Logstash

一个用于日志数据收集、转换和发送的开源工具。Logstash可以从多个来源收集数据,对数据进行处理和转换(如过滤、格式化),然后将数据发送到各种目的地,如Elasticsearch、其他存储系统或者消息队列。

3.Kibana

一个用于数据可视化的开源工具。Kibana提供了一个基于Web的界面,让用户能够搜索、查看和交互存储在Elasticsearch索引中的数据。它支持各种图表、表格、地图等形式的数据可视化,帮助用户更好地理解数据和发现数据中的模式。

4.ELK 组件解决的主要问题

分布式日志数据统一收集,实现集中式查询和管理

Logstash 可以从分布式环境中收集日志数据,支持多种来源的日志收集,如文件、消息队列、数据库等,通过统一格式化和过滤后发送到 
Elasticsearch 进行存储和索引。Elasticsearch 作为分布式的搜索和分析引擎,能够存储大规模的日志数据,并支持高效的搜索和聚合查询,实现集中式的数据查询和管理。

故障排查

ELK Stack 提供强大的日志分析和搜索能力,可以帮助运维人员快速定位和解决系统中的故障问题。
通过 Kibana 的实时图表和仪表板功能,运维人员可以可视化地监控系统运行状态、识别异常事件,并进行相关的调查和处理。

安全信息和事件管理

ELK Stack 可以用于集中管理和分析安全相关的日志信息,如入侵检测系统(IDS)、防火墙日志、认证和授权日志等。
Elasticsearch 的强大搜索和分析功能可以用于快速检测和响应安全事件,帮助组织提升安全防护和响应能力。

报表功能

Kibana 提供了丰富的数据可视化功能,可以创建定制化的报表和仪表板,将数据以图表和表格形式展示,支持各种数据分析需求和业务报告的生成。

5.ELK应用的好处
  1. 日志查询和问题排查

    Elasticsearch 作为一个强大的实时搜索和分析引擎,能够快速索引和存储大量日志数据。通过Elasticsearch,可以进行高效的日志查询,帮助运维人员快速定位问题,进行故障排查和日志分析。
  2. 故障恢复和自愈

    ELK技术栈通过实时的数据索引和分析能力,支持快速响应故障情况。运维团队可以利用实时监控和预警功能,在系统出现异常时迅速发现并采取相应的措施,从而实现故障的快速恢复和自动化处理。
  3. 应用日志分析和错误报警

    使用Logstash作为日志收集、处理和转发的工具,可以从各种数据源(如应用程序、服务器日志等)中采集数据,并经过处理后发送到Elasticsearch进行存储和分析。通过Kibana提供的数据可视化功能,可以实时监控应用程序的日志信息,快速识别和报警异常情况,及时处理问题。
  4. 性能分析

    ELK技术栈能够不仅仅分析日志,还可以进行性能分析。通过监控系统和应用程序的指标,如CPU使用率、内存使用情况、网络流量等,可以帮助运维团队发现性能瓶颈和优化机会,提高系统的稳定性和性能。
  5. 用户行为分析

    借助Elasticsearch强大的分析能力,可以对用户行为数据进行收集、存储和分析。通过分析用户的操作行为、偏好和趋势,可以为产品改进、市场营销和用户体验优化提供数据支持。
6.ELK的工作原理
  1. 部署 Logstash

    Logstash通常部署在需要收集日志的服务器上,也可以集中部署在一个日志服务器上。它负责从各种数据源(如日志文件、消息队列等)收集数据。
  2. 数据处理和输出

    Logstash接收到原始数据后,会进行数据过滤、解析和格式化。这些步骤包括解析数据、标准化格式、甚至是数据的增强和转换(如IP地址转换为地理位置)等。
  3. 数据存储与索引

    格式化后的数据被送入Elasticsearch集群进行存储和索引。Elasticsearch是一个分布式搜索和分析引擎,能够快速索引大量数据,并支持复杂的查询。
  4. 数据可视化

    Kibana作为ELK技术栈中的可视化工具,通过与Elasticsearch集成,可以实时查询和分析存储在Elasticsearch中的数据。Kibana提供了丰富的图表、表格和地图等视觉化组件,用于用户界面的数据展示和交互。
  5. 实时监控和警报

    ELK技术栈可以配置实时监控和警报机制,使得系统能够在发生关键事件或达到特定阈值时即时通知相关人员。

总体来说,ELK技术栈通过Logstash收集、处理和传输数据,Elasticsearch进行存储和索引,Kibana进行数据可视化和交互,使得用户能够实现对日志和其他数据源的集中管理、实时分析和可视化展示,从而帮助企业快速响应问题、优化系统性能和提升运维效率。

7.ELK的主要应用场景
  1. EL日志集中管理与分析

    ELK最常见的用途是实时收集、存储和分析大量的日志数据。通过Logstash收集来自各种数据源的日志,经过Elasticsearch的索引和存储,再由Kibana进行可视化展示和分析。这种集中管理和分析日志的能力,使得运维团队能够快速识别和解决系统问题,改善系统稳定性和可靠性。
  2. 应用性能监控与优化

    通过监控应用程序的日志和性能指标(如CPU使用率、内存占用、请求响应时间等),ELK可以帮助开发团队分析和优化应用程序的性能。这种实时的监控和分析能力,有助于提前发现潜在的性能问题,并迅速采取措施进行优化,从而提升用户体验和系统效率。
  3. 安全事件监控与分析

    ELK技术栈也被广泛应用于安全信息和事件管理(SIEM)。通过收集和分析安全事件日志(如入侵检测系统、防火墙日志等),可以快速检测潜在的安全威胁和异常行为。Elasticsearch的强大搜索和分析功能,结合Kibana的可视化能力,使安全团队能够及时响应和应对安全事件,加强系统的安全防护。
  4. 业务智能与数据分析

    ELK不仅限于日志管理和安全监控,还可以用于业务智能和数据分析。企业可以利用Elasticsearch强大的搜索和分析引擎,结合Kibana的可视化功能,分析业务数据趋势、用户行为和市场动态,为决策提供数据支持和见解。
  5. IoT数据分析

    随着物联网(IoT)设备的普及,ELK技术栈也被应用于IoT数据的收集、存储和分析。通过Logstash收集IoT设备生成的数据流,经过Elasticsearch进行实时索引和存储,再由Kibana进行数据可视化,帮助企业理解和优化IoT设备的性能、运行状况和用户体验。

二.安装部署ELK

节点地址服务
node1节点(2C/4G)node1/192.168.240.11Elasticsearch
node2节点(2C/4G)node2/192.168.240.12    Elasticsearch
Apache节点apache/192.168.240.13    Logstash  Kibana  Apache
1.前期准备

1.1 安装java环境

java -version										#如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

1.2 关闭防火墙和selinux

systemctl disable  --now   firewalld
setenforce 0
2.安装部署ElasticseaErch 软件

2.1  安装ElasticseaErch 软件

[root@localhost data]# ls
elasticsearch-6.7.2.rpm  elasticsearch-head-master.zip  node-v8.2.1.tar.gz  phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@localhost data]# rpm -ivh elasticsearch-6.7.2.rpm 
cd /etc/elasticsearch/
mkdir bak 
cp -a *.yml  bak/
#备份

2.2  修改配置文件

[root@node1 elasticsearch]# vim elasticsearch.yml
17 cluster.name: my-elk-001
#修改集群名字

23 node.name: node1
24 node.master: true
25 node.data: true
#设置 节点名称 主从之间不能一致    24作为主节点   25作为数据节点

45 bootstrap.memory_lock: true
#内存锁开启  禁止使用  swap

57 network.host: 0.0.0.0
#监听地址
61 http.port: 9200
#  默认使用端口
62 transport.tcp.port: 9300
#内部传输端口

75 discovery.zen.ping.unicast.hosts: ["192.168.240.11:9300", "192.168.240.12:9300"]
#自动集群发现,加入主机名  使用单播 类似心跳线

grep -v "^#"  elasticsearch.yml 

2.3  修改系统配置

两台服务器都需要改

[root@localhost elasticsearch]#vim /etc/security/limits.conf
......
*  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimited

2.4  修改 systemd 服务管理器

两台服务器都需要改

/etc/systemd/system.conf 文件是用于配置 systemd 的,这是一种用于 Linux 操作系统的系统和服务管理器。通过这个文件,你可以自定义与系统操作、性能和行为相关的各种设置

  • DefaultTimeoutStartSec=:设置启动服务的默认等待时间

  • DefaultTimeoutStopSec=:设置停止服务的默认等待时间

  • DefaultRestartSec=:设置在重新启动服务之前的默认休眠时间

  • DefaultLimitNOFILE=:设置打开文件数量的默认限制

  • DefaultLimitNPROC=:设置进程数量的默认限制

  • DefaultLimitCORE=:设置核心文件大小的默认限制

  • DefaultEnvironment=:指定服务的默认环境变量

[root@localhost elasticsearch]#vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

2.5  修改内核参数

两台服务器都需要改

Lucene 是一个高性能、全功能的文本搜索引擎库,用于实现高效的文本索引和搜索。它是用 Java 编写的,可以嵌入到各种应用程序中,以提供强大的全文搜索功能。Lucene 是许多流行搜索平台的核心,如 Apache Solr 和 Elasticsearch。

以下是 Lucene 的一些关键特性和功能:

  1. 文本索引:Lucene 提供了强大的文本索引功能,能够处理大规模文本数据并生成高效的索引。

  2. 全文搜索:支持复杂的查询语法,包括布尔查询、短语查询、通配符查询、模糊查询等。

  3. 可扩展性:Lucene 设计为模块化和可扩展的,允许用户根据需要扩展和定制其功能。

  4. 分词和分析:提供了丰富的分词器和分析器,用于将文本分解为可索引和可搜索的词语。

  5. 排序和评分:支持对搜索结果进行排序和评分,以提高搜索的准确性和相关性。

  6. 多语言支持:支持多种语言的文本处理和搜索。

优化elasticsearch用户拥有的内存权限 由于ES构建基于lucene, 而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问;因此,我们很有必要将一半的物理内存留给lucene ; 另一半的物理内存留给ES(JVM heap )。所以, 在ES内存设置方面,可以遵循以下原则:

  • 当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给操作系统,供lucene使用

  • 当机器内存大于64G时,遵循原则:建议分配给ES分配 4~32G 的内存即可,其它内存留给操作系统,供lucene使用

[root@localhost elasticsearch]#vim /etc/sysctl.conf
#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144

sysctl -p
sysctl -a | grep vm.max_map_count

 将配置文件elasticsearch.yml  传输到另一台服务器

scp -r /etc/elasticsearch/elasticsearch.yml  192.168.240.12:/etc/elasticsearch/

#需要注意的是传输完成后需要将配置文件中的
23 node.name: node1  修改为node2

2.6  重启服务器 启动elasticsearch服务

reboot
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200

2.7  查看节点信息

浏览器访问  
http://192.168.240.11:9200  
http://192.168.240.12:9200 
查看节点 Node1、Node2 的信息。

浏览器访问 
http://192.168.240.11:9200/_cluster/health?pretty  
http://192.168.240.12:9200/_cluster/health?pretty
查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。

浏览器访问 http://192.168.240.11:9200/_cluster/state?pretty  检查群集状态信息

2.8  编译安装 Elasticsearch-head 插件

主从都可以安装

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。 安装 Elasticsearch-head 需要提前安装好依赖软件 nodephantomjs。 node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

2.8.1  编译安装 node 组件

#上传软件包 node-v8.2.1.tar.gz 到/data
yum install gcc gcc-c++ make -y

cd /data
tar zxvf node-v8.2.1.tar.gz

cd node-v8.2.1/
./configure
make && make install

2.8.2  安装phantomjs 

#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到data
cd /data
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
ln -s  /data/phantomjs-2.1.1-linux-x86_64/bin/phantomjs   /usr/bin
#做软链接

2.8.3  安装Elasticsearch-head 数据可视化工具

#上传软件包 elasticsearch-head-master.zip 到/data
cd /data
unzip elasticsearch-head-master.zip
cd /data/elasticsearch-head/
npm install		 //安装依赖包

2.8.4  启动 Elasticsearch-head服务

必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。

[root@localhost elasticsearch]#cd /data/elasticsearch-head/
[root@localhost elasticsearch-head]# npm run start &
#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

2.8.5 测试插件

192.168.240.11:9100
192.168.240.12:9100

2.8.6  插入索引测试

curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

3. 在apache节点上 部署  Logstash

3.1 安装服务

yum -y install java
java -version
#java 有了不用安装
yum -y install httpd
systemctl start httpd

3.2 安装logstash

cd /opt
[root@localhost data]#  rpm -ivh logstash-6.7.2.rpm                          

#开启服务
systemctl enable --now logstash.service

[root@localhost opt]# ln -s  /usr/share/logstash/bin/logstash   /usr/bin/
# 做软连接

3.3 使用logstash

Logstash 命令常用选项: -f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。 -e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。 -t:测试配置文件是否正确,然后退出。

例子:在命令行中收集日志数据

#输入采用标准输入,输出采用标准输出(类似管道),新版本默认使用 rubydebug 格式输出

logstash -e 'input { stdin{} } output { stdout{} }'

# 此处输入需要的信息
hello world

{
       "message" => "hello world",
    "@timestamp" => 2024-07-16T07:50:39.326Z,
          "host" => "apache",
      "@version" => "1"
}

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
结果与上面一样

3.4 使用 Logstash 将信息写入 Elasticsearch 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.240.11:9200","192.168.240.12:9200"] } }'

# 输入信息
www.cxk.com
hello world

3.5 使用配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)

  • input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等 file beats kafka redis stdin

  • filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式 grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名>正则表达式) 字段名: 正则表达式匹配到的内容 date 对数据中的时间格式进行统一和格式化 mutate 对一些无用的字段进行剔除,或增加字段 mutiline 对多行数据进行统一编排,多行合并或拆分

  • output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。 elasticsearch stdout

#格式如下:
input {...}
filter {...}
output {...}

#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {
	file { path =>"/var/log/messages" type =>"syslog"}
	file { path =>"/var/log/httpd/access.log" type =>"apache"}
	
vim system.conf
input {
    file{
        path =>"/var/log/messages"
        type =>"system"
        start_position =>"beginning"
		# ignore_older => 604800
        sincedb_path => "/etc/logstash/sincedb_path/log_progress"
        add_field => {"log_hostname"=>"${HOSTNAME}"}
    }
}

#path表示要收集的日志的文件位置
#type是输入ES时给结果增加一个叫type的属性字段
#start_position可以设置为beginning或者end,beginning表示从头开始读取文件,end表示读取最新的,这个要和ignore_older一起使用
#ignore_older表示了针对多久的文件进行监控,默认一天,单位为秒,可以自己定制,比如默认只读取一天内被修改的文件
#sincedb_path表示文件读取进度的记录,每行表示一个文件,每行有两个数字,第一个表示文件的inode,第二个表示文件读取到的位置(byteoffset)。默认为$HOME/.sincedb*
#add_field增加属性。这里使用了${HOSTNAME},即本机的环境变量,如果要使用本机的环境变量,那么需要在启动命令上加--alow-env

output {
    elasticsearch {												#输出到 elasticsearch
        hosts => ["192.168.240.11:9200","192.168.240.12:9200"]	#指定 elasticsearch 服务器的地址和端口
        index =>"system-%{+YYYY.MM.dd}"							#指定输出到 elasticsearch 的索引格式
    }
}

实际测试:

[root@localhost log]# vim /etc/logstash/conf.d/system-log.conf 

input {
    file {
      path => "/var/log/messages"
      type => "system"
      start_position => "beginning"
    }

}

output {
  elasticsearch {
  hosts => [ "192.168.240.11:9200","192.168.240.12:9200" ]
  index => "system-%{+YYYY.MM.dd}"
  }

}

[root@localhost conf.d]# chmod +r /var/log/messages 
#添加权限

[root@localhost conf.d]# logstash   -f  /etc/logstash/conf.d/system-log.conf 
#启动logstash

4.安装 kibana

4.1 安装

rpm -ivh kibana-6.7.2-x86_64.rpm 

4.2 修改配置

[root@localhost data]# cd  /etc/kibana/
[root@localhost kibana]# cp kibana.yml  kibana.yml.bak -a

[root@localhost kibana]# vim kibana.yml

2   		 server.port: 5601          		#打开端口
7    server.host: "0.0.0.0"      	#监听端口
28   elasticsearch.hosts: ["http://192.168.240.11:9200", "http://192.168.240.12:9200"]  #el服务器地址
37   kibana.index: ".kibana"         #打开索引
96   logging.dest: /var/log/k.log      #指定日志文件, 需要手动建立文件
113  i18n.locale: "zh-CN"              #中文设置


touch  /var/log/kibana.log
[root@localhost kibana]# chown kibana:kibana /var/log/k.log

4.3  启动kibana

[root@localhost kibana]# systemctl enable --now kibana.service
[root@localhost kibana]# ss -nap |grep 5601

4.4 访问测试

4.5  建立索引

三.实现nginx日志管理

yum安装nginx,编辑配置文件

需要将原来的日志删除

yum install -y epel-release.noarch 
yum install -y nginx
systemctl start nginx
vim /etc/nginx/nginx.conf

log_format access_json '{"@timestamp":"$time_iso8601",'
        '"host":"$server_addr",'
        '"clientip":"$remote_addr",'
        '"size":$body_bytes_sent,'
        '"responsetime":$request_time,'
        '"upstreamtime":"$upstream_response_time",'
        '"upstreamhost":"$upstream_addr",'  
        '"http_host":"$host",'
        '"uri":"$uri",'
        '"xff":"$http_x_forwarded_for",'
        '"referer":"$http_referer",'
        '"tcp_xff":"$proxy_protocol_addr",'
        '"http_user_agent":"$http_user_agent",'
        '"status":"$status"}';

nginx -s reload

另一台主机访问curl 192.168.240.13 ,生成成功日志

 

vim /etc/logstash/conf.d/nginx-log.conf
input {
    file {
      path => "/var/log/nginx/access.log"
      type => "nginx"
      start_position => "beginning"
    }

}

output {
  elasticsearch {
  hosts => [ "192.168.240.11:9200","192.168.240.12:9200" ]
  index => "nginx-%{+YYYY.MM.dd}"
  }

}

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值