Linux--ELK日志分析系统

简介: Linux--ELK日志分析系统

一,ELK是什么?

       ELK是一套针对日志数据做解决方案的框架,分别代表了三款产品: - E: ElasticSearch(ES),负责日志的存储和检索; - L:Logstash,负责日志的收集,过滤和格式化; - K:Kibana,负责日志的展示统计和数据可视化;

ElasticSearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

Logstash

Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。

Kibana

Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。


二,ELK可以做什么:

应用出现故障,需要通过日志排查故障信息。当应用已部署了多个环境时,这时排查的难度和耗时就是一个巨大的损耗。而ELK就可以对多个环境的日志进行收集,过滤,存储,检错,可视化。届时你只需要查看kibana上的日志信息,就可以找出故障所在。

针对应用在生产环境上的表现需要数据支撑,如访客数,功能调用量,出错率等等。此类数据的收集,当然可以通过使用别的产品或编写一套程序进行输出,是有其一定的效果。但能像ELK这样对应用无入侵,且功能强大的开源软件。那是少之又少了。

三,ELK一般用来做啥?

 ELK组件在海量日志系统的运维中,可用于解决:

       分布式日志数据集中式查询和管理

       系统监控,包含系统硬件和应用各个组件的监控

       故障排查

       安全信息和事件管理

       报表功能

 ELK组件在大数据运维系统中,主要可解决的问题如下:

       日志查询,问题排查,上线检查

       服务器监控,应用监控,错误报警,Bug管理

       性能分析,用户行为分析,安全漏洞分析,时间管理


四,ELK日志分析的构成:

1.elasticsearch的基础概念:

       接近实时(NRT),群集(cluster),节点(node),索引(index),分片或副本(shards & replicas)。

2.logstash的主要组件:

       shipper:日志收集者。

       lndexer:日志存储者。

       broker:日志Hub

       Search and Storage:允许对事件进行搜索和存储

       web interface:基于web的展示界面

3.kibana的主要功能:

       Elasticsearch无缝之集成,整合数据,复杂数据分析,让更多团队成员收益,接口灵活,配置简单,可视化多数据源,简单数据导出。

一,配置Elasticsearch软件

注:两台节点配置相同,在配置elasticsearch配置文件中注意服务器名称不要相同,群集名称要相同,才可以实现群集效果。

       准备环境:在两台ELK节点上配置域名解析,通过本地/etc/hosts文件实现。

[root@node1 ~]# hostname
node1
[root@node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.1 node1
192.168.2.2 node2

检查Java环境

[root@node1 ~]# java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)

  部署elasticsearch软件

[root@node1 ~]# rpm -ihv /mnt/elasticsearch-5.5.0.rpm 
警告:/mnt/elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                                                            ################################# [100%]

 加载系统服务

[root@node1 ~]# systemctl daemon-reload 
[root@node1 ~]# systemctl enable elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@node1 ~]# 

加载系统服务

[root@node1 ~]# systemctl daemon-reload 
[root@node1 ~]# systemctl enable elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@node1 ~]# 

   创建数据存放数据并授权

1. [root@node1 ~]# mkdir -p /data/elk_data/
2. [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/

  更改elasticsearch主配置文件

[root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml 
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

    启动elasticsearch并查看是否成功开启

[root@node1 ~]# systemctl start elasticsearch.service 
[root@node1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      4297/java          

查看节点信息

二,安装Elasticsearch-head插件

  编译安装node,编译安装node耗时较长,大约40min,根据机械的配置可能有所不同,请耐心等待。

[root@node1 ~]# tar zxf /mnt/node-v8.2.1.tar.gz -C /usr/src/
[root@node1 ~]# cd /usr/src/node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure && make && make install

       安装phantomjs

[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# tar jxf /mnt/phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/

安装Elasticsearch-head

[root@node1 bin]# cd
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# tar zxf /mnt/elasticsearch-head.tar.gz 
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

  修改Elasticsearch配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@node1 ~]# systemctl restart elasticsearch

 启动服务

[root@node1 elasticsearch-head]# npm run start &
[root@node1 elasticsearch-head]# netstat -lnupt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      50396/grunt         
[root@node1 elasticsearch-head]# netstat -lnupt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      50023/java          

 通过elasticsearch-head查看elasticsearch信息。通过浏览器访问http://192.168.2.1:9100/,并连接群集

        插入索引。通过命令插入一个测试索引,通过输出信息可以看到索引为index-demo,类型为test。

[root@node1 elasticsearch-head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

查看效果

二,logstash安装及使用方法

注:logstash一般部署在需要监控其日志的服务器中,在本案例中,logstash部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elasticsearch中。在正式部署之前,在Node1上部署Logstash,以熟悉logstash的使用方法。logstash也需要Java环境,所以安装之前也要检查当前机器的Java环境是否存在。

在node1上安装logstash

[root@node1 ~]# rpm -ihv /mnt/logstash-5.5.1.rpm 
警告:/mnt/logstash-5.5.1.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:logstash-1:5.5.1-1              ################################# [100%])
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@node1 ~]# systemctl start logstash.service 
[root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

  测试logstash

logstash命令行中常用的命令选项如下:

           -f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash

           -e:后面跟着字符串,该字符串可以被当做lgostash配置(如果是“ ”,则默认使用stdin作为输入,stdout作为输出)。

           -t:测试配置文件是否正确,然后退出。

[root@node1 ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.2.1:9200"] } }'
www.baidu.com
www.sina.com
www.google.com

 查看logstash新增的索引

           logstash配置文件

1. input {
2. 
3.     fliter {...}
4. 
5. }
6. output {...}
7.

 下来修改logstash配置文件,让其收集系统日志/vcar/log/messages,并将其输出到elasticsearch中。

[root@node1 src]# chmod o+r /var/log/messages
[root@node1 src]# ll /var/log/messages
-rw----r--. 1 root root 107359 9月   2 03:23 /var/log/messages
[root@node1 ~]# vim /etc/logstash/conf.d/system.conf
input {
        file {
                path => "/var/log/messages"
                type => "system"
                start_position => "beginning"
        }
}
output {
        elasticsearch {
                hosts => ["192.168.2.1:9200"]
                index => "system-%{+YYYY.MM.dd}"
        }
}
~                                                                             
[root@node1 src]# systemctl restart logstash

三,安装Kibana

    在node1服务器上安装Kibana,并设置开机启动

[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# rpm -ihv /mnt/kibana-5.5.1-x86_64.rpm 
警告:/mnt/kibana-5.5.1-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:kibana-5.5.1-1                  ################################# [100%])
[root@node1 src]# systemctl enable kibana.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

 设置kibana的主配置文件/etc/kibana/kibana.yml\

[root@node1 src]# vim /etc/kibana/kibana.yml 
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
bana.index: ".kibana"

    启动kibana服务

[root@node1 src]# systemctl start kibana.service

   验证kibana,通过浏览器访问http://192.168.2.1:5601,第一次登录需要添加一个elasticsearch索引,添加前面创建索引system-*。

  单击“Discover”按钮查看图标信息及日志信息,可以分类显示,使鼠标指针悬停在“Available Fields”中的“host”,然后点击“add”按钮,可以看到按照“host”筛选后的结果。

    将apache服务器的日志添加到Elasticsearch并通过Kibana显示。

1. [root@node1 src]# yum -y install httpd
2. [root@node1 ~]# systemctl start httpd

  在logstash配置文件apache_log.conf

[root@node1 ~]# cd /etc/logstash/conf.d/
[root@node1 conf.d]# vim apache_log.conf 
input {
        file {
                path => "/etc/httpd/logs/access_log"
                type => "access"
                start_position => "beginning"
        }
        file {
                path => "/etc/httpd/logs/error_log"
                type => "error"
                start_position => "beginning"
        }
}
output {
        if [type] == "access" {
                elasticsearch {
                        hosts => ["192.168.2.1:9200"]
                        index => "apache_access-%{+YYYY.MM.dd}"
                }
        }
        if [type] == "error" {
                elasticsearch {
                        hosts => ["192.168.2.1:9200"]
                        index => "apache_error-%{+YYYY.MM.dd}"
                }
        }
}

激活配置文件

/usr/share/logstash/bin/logstash -f apache_log.conf

登录Kibana,单击“  Create index Pattern ”

添加“ apache_access ”,并单击Create按钮。

查看apache_access日志

添加“ apache_error ”,并单击Create按钮。

查看 apache_error 日志文件

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
7月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
608 3
Linux系统禁用swap
|
7月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1140 3
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
7月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
653 122
基于docker搭建监控系统&日志收集
|
7月前
|
消息中间件 Java Kafka
搭建ELK日志收集,保姆级教程
本文介绍了分布式日志采集的背景及ELK与Kafka的整合应用。传统多服务器环境下,日志查询效率低下,因此需要集中化日志管理。ELK(Elasticsearch、Logstash、Kibana)应运而生,但单独使用ELK在性能上存在瓶颈,故结合Kafka实现高效的日志采集与处理。文章还详细讲解了基于Docker Compose构建ELK+Kafka环境的方法、验证步骤,以及如何在Spring Boot项目中整合ELK+Kafka,并通过Logback配置实现日志的采集与展示。
1191 64
搭建ELK日志收集,保姆级教程
|
8月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
708 3
Linux系统初始化脚本
|
8月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
542 18
|
7月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
839 2
|
7月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
807 1