ELK 企业级日志分析系统

日志管理方案

  • 服务器数量较时,使用rsyslog或者脚本进行收集和分割日志。统一汇总到专门存放日志的日志服务器。
    • 查看日志则把日志传到windows主机上,使用专业工具打开分析日志
  • 如果服务器数量较,则采用ELK收集日志,存储日志,展示日志。(大型日志系统)
  • 对于在k8s上运行的容器日志,使用Loki+Granfana收集日志,存储日志,展示日志。

---------------------- ELK 概述 ----------------------------------------

1、为什么要使用 ELK
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。


往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。


一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

2、完整日志系统基本特征
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制

3、ELK 简介

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch(ES)、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。

Logstash:作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。(对日志数据进行收集处理
Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。

ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志
Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。(具有搜索引擎 可以全文检索 的数据库

Kiabana:Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总、分析和搜索重要数据。图形化展示的工具)

ELK 企业级日志分析系统_第1张图片

可以添加的其它组件

●Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中。(直接部署到应用服务器上,不像Logstash影响内存性能所以只能单独部署)

filebeat 结合 logstash 带来好处(filebeat在应用服务器上收集数据后 传输给logstash服务器 再由logstash服务器发送给ES存储)

  1. 通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
  2. 从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
  3. 将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
  4. 使用条件数据流逻辑组成更复杂的处理管道

●缓存/消息队列(redis、kafka、RabbitMQ等):可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。

●Fluentd:是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。
在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。

4、ELK 的工作原理(三大组件工作过程)【面试题】

ELK 企业级日志分析系统_第2张图片

  1. 在日志服务器上部署 Logstash,将应用服务器产生的日志进行集中化管理汇聚到日志服务器上(rsyslog,脚本)
  2. 收集日志,将日志格式化(Logstash)并输出到 Elasticsearch 群集中。
  3. 对格式化后的数据进行索引和存储(Elasticsearch)。
  4. 从 ES 群集中查询数据生成图表,并进行前端数据的展示(Kibana)。

一般不会直接将logstash直接部署到应用服务器上

而是现将日志做集中化处理,汇聚给单独的logstash服务器(Java开发的应用占内存)

总结

logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。


------------------- ELK Elasticsearch 集群部署(在Node1、Node2节点上操作) ----------------------------------

node1节点(2C/4G):node1/192.168.80.101                    Elasticsearch 
node2节点(2C/4G):node2/192.168.80.102                    Elasticsearch

Elasticsearch集群至少2台,内存建议6G


Apache节点:apache/192.168.80.103                        Logstash  Apache Kibana  

Kibana 安装在任意服务器上,只需要与Elasticsearch能网络联通即可。这里为了节省服务器将  Logstash  Apache Kibana  安装于同一台机器上。

ELK 企业级日志分析系统_第3张图片

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)

关闭防火墙 

systemctl stop firewalld
setenforce 0

2.部署 Elasticsearch 软件

(1)安装elasticsearch—rpm包

#上传elasticsearch-6.7.2.rpm到/opt目录下

cd /opt
rpm -ivh elasticsearch-6.7.2.rpm

(2)修改elasticsearch主配置文件

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

注意,yml配置文件

:后必须有一个空格!

并且不能有tab键! 

vim /etc/elasticsearch/elasticsearch.yml

--17--取消注释,指定集群名字
cluster.name: my-elk-cluster

--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
node.master: true        #是否master节点,false为否    此处双true为mixed混合节点,不建议
node.data: true          #是否数据节点,false为否        
master节点管理集群,不负责读写。内存可以小些,但是必须稳定。
data节点负责实际的数据读写,压力大,内存需求大。
client节点分担data节点读写压力。

--33--取消注释,指定数据存放路径
path.data: /var/lib/elasticsearch
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch

--43--取消注释,避免es使用swap交换分区
bootstrap.memory_lock: true

--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200                    #指定es集群提供外部访问的接口
transport.tcp.port: 9300        #指定es集群内部通信接口

--68--取消注释,集群发现通过单播实现,指定要发现的节点
discovery.zen.ping.unicast.hosts: ["192.168.80.101:9300", "192.168.80.102:9300"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
scp elasticsearch.yml 192.168.80.102/:`pwd`

scp传输给另一台服务器,别忘了改配置文件的NODE NAME不能一样!

Elasticsearch三大节点类型【面试题】

master节点管理集群,不负责读写。内存可以小些,但是必须稳定(宕机导致集群瘫痪,一般为3 5 7台便于选举)。
data节点负责实际的数据读写,压力大,内存需求大。
client节点分担data节点读写压力。(不会超过集群数量1/3)

                                                若有20节点 ,如下分配

节点类型 机器数量 内存大小 需求
master 16GB 机器必须稳定
data 12  32GB
client 32GB

(3)es 性能调优参数

优化最大内存大小和最大文件描述符的数量

vim /etc/security/limits.conf
修改用户限制

......
*  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimited
vim /etc/systemd/system.conf
修改系统内核限制

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

重启生效,init 6,不然启动elasticsearch.service时候会因为配置文件中写了内存锁定而系统没有设置而不能启动(也不报错,只能看日志)

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

vim /etc/sysctl.conf

#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144
sysctl -p
sysctl -a | grep vm.max_map_count

(4)启动elasticsearch是否成功开启

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

(5)查看节点信息

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

ELK 企业级日志分析系统_第4张图片

浏览器访问 http://192.168.80.101:9200/_cluster/health?pretty  、 http://192.168.80.102:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。ELK 企业级日志分析系统_第5张图片

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

 ELK 企业级日志分析系统_第6张图片

#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。


3.安装 Elasticsearch-head 插件

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

(1)编译安装 node

上传软件包 node-v8.2.1.tar.gz 到/opt

yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j8
make install

(2)安装 phantomjs

上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt

cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

(3)安装 Elasticsearch-head 数据可视化工具

上传软件包 elasticsearch-head-master.zip 到/opt

cd /opt
unzip elasticsearch-head-master.zip
cd /opt/elasticsearch-head-master/
npm install         //安装依赖包

(4)修改 Elasticsearch 主配置文件

vim /etc/elasticsearch/elasticsearch.yml

......
--末尾添加以下内容--
http.cors.enabled: true                #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"            #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch

(5)启动 elasticsearch-head 服务

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

cd /opt/elasticsearch-head-master/
npm run start &

    [1] 2501
    [root@xue elasticsearch-head-master]#
    > [email protected] start /opt/elasticsearch-head-master
    > grunt server

    Running "connect:server" (connect) task
    Waiting forever...
    Started connect web server on http://localhost:9100

elasticsearch-head 监听的端口是 9100

netstat -natp |grep 9100

(6)通过 Elasticsearch-head 查看 Elasticsearch 信息

通过浏览器访问 http://192.168.80.101:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。

ELK 企业级日志分析系统_第7张图片

(7)创建索引

API基本格式
http://ip:port/<索引>/<类型>/<文档ID>

通过命令插入一个测试索引,索引为 index-demo,类型为 test。

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

shell中执行 输出结果如下:
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}

浏览器访问 http://192.168.80.101:9100/ 查看索引信息,可以看见索引默认集群被分片5个,并且有一个副本(粗框主数据,细框备份数据)。

ELK 企业级日志分析系统_第8张图片

点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。

ELK 企业级日志分析系统_第9张图片

 Elasticsearch索引管理(面试有可能问 数据操作是软件开发的事情 运维知道简单的即可)

curl -X 方式(跟上下方的put get delete等)

 ELK 企业级日志分析系统_第10张图片

---------------------- ELK Logstash 部署(在 Apache/NGINX 节点上操作) ----------------------------------------

Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache/NGINX服务器上,用于收集 Apache/NGINX服务器的日志信息并发送到 Elasticsearch。

1.更改主机名

hostnamectl set-hostname NGINX

2.安装Apahce服务(httpd) 或是安装NGINX服务

HTTPD

yum -y install httpd
systemctl start httpd

 NGINX(本次实验使用nginx)

yum install -y epel-release.noarch
yum install -y nginx

systemctl start nginx
systemctl enable nginx

3.安装Java环境

yum -y install java
java -version

4.安装logstash

上传软件包 logstash-6.7.2.rpm 到/opt目录下

cd /opt
rpm -ivh logstash-6.7.2.rpm
systemctl start logstash.service
systemctl enable logstash.service

若要查看安装后文件路径 

rpm -ql logstash

创建系统变量软连接以便shell调用 

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

5.测试 Logstash

Logstash 命令常用选项

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

定义输入和输出流(测试是否能够正常输入输出)


输入采用标准输入(键盘),输出采用标准输出(屏幕),新版本默认使用 rubydebug 格式输出

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

键盘输入I like playing GAMES ,查看输出

ELK 企业级日志分析系统_第11张图片


使用 rubydebug 输出详细格式显示,codec 为一种编解码器(新版本默认就是rubydebug所以没区别)

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

键盘输入I like playing GAMES ,查看输出 

ELK 企业级日志分析系统_第12张图片


使用 Logstash 将信息写入 Elasticsearch 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.80.101:9200"] } }'
             输入                输出            对接
......
www.baidu.com                                        #键入内容(标准输入)
www.sina.com.cn                                        #键入内容(标准输入)
www.google.com                                        #键入内容(标准输入)

键盘输入 I like van youxi,输出到Elasticsearch。浏览器访问 http://192.168.80.101:9100/ 查看索引信息和数据浏览。
ELK 企业级日志分析系统_第13张图片

6.定义 logstash配置文件

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


  • input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
    • 常见数据源:file(文件)   beats(filebeat)   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"}
}


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

添加日志权限让logstash能够访问

chmod +r /var/log/messages
#让 Logstash 可以读取日志
cd /etc/logstash/conf.d/
vim system.conf

input { #输入源
    file{ #文件类型
        path =>"/var/log/messages" #文件路径
        type =>"system" #日志事件类型为系统日志
        start_position =>"beginning" #beginning从头开始读取文件,end读取最新的,要和ignore_older一起使用
        # ignore_older => 604800 #若设置为end 读取一天内数据(604800s)
        sincedb_path => "/etc/logstash/sincedb_path/log_progress" #记录文件读取进度(inode与日志文件位置)的文件位置
        add_field => {"log_hostname"=>"${HOSTNAME}"} #向每个日志字段添加 本机的主机名 属性
    }
}

path表示要收集的日志的文件位置,必须使用绝对路径,可用通配符匹配。分隔符 , 分隔多个文件
exclude:排除不想监听的文件
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.80.101:9200","192.168.80.102:9200"]     #指定 elasticsearch 服务器的地址和端口。输出多个elasticsearch 服务器用 , 分隔
        index =>"system-%{+YYYY.MM.dd}"                            #指定输出到 elasticsearch 的索引格式(索引名字)
    }
}

 sincedb_path  记录文件读取进度的文件位置,必须指定一个文件而不是一个目录、并且更改权限为logstash用户

mkdir /etc/logstash/sincedb_path/
touch /etc/logstash/sincedb_path/log_progress
chown logstash:logstash /etc/logstash/sincedb_path/log_progress

指定配置文件启动logstash  

logstash -f system.conf 

 实例1:监控NGINX服务器的日志文件

将 NGINX服务器的日志(access)添加到 Elasticsearch

cd /etc/logstash/conf.d/
vim nginx.conf


input {
    file{
         path =>"/var/log/nginx/access.log"
         type =>"access"
         start_position =>"beginning"
         sincedb_path => "/etc/logstash/sincedb_path/log_progress"
         add_field => {"log_hostname"=>"${HOSTNAME}"}
    }
}

output {
    elasticsearch {
        hosts => ["192.168.80.101:9200","192.168.80.102:9200"]
        index =>"nginx_access-%{+YYYY.MM.dd}"
     }
}
chmod +r /var/log/nginx/access.log
#让 Logstash 可以读取日志

 sincedb_path  记录文件读取进度的文件位置,必须指定一个文件而不是一个目录、并且更改权限为logstash用户

mkdir /etc/logstash/sincedb_path/
touch /etc/logstash/sincedb_path/log_progress
chown logstash:logstash /etc/logstash/sincedb_path/log_progress

指定配置文件启动logstash

logstash -f nginx.conf
logstash -f nginx.conf -t #-t输出错误信息

ELK 企业级日志分析系统_第14张图片

浏览器访问 http://192.168.80.101:9100/ 查看索引信息

ELK 企业级日志分析系统_第15张图片

实例2:监控Apache服务器的日志文件 (若要input、output两个file文件示例。NGINX也可以按照格式修改)

将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch

vim /etc/logstash/conf.d/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" {    #✨ IF判断,输出不同文件
        elasticsearch {
            hosts => ["192.168.80.101:9200","192.168.80.102:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.80.101:9200","192.168.80.102:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

 指定配置文件运行logstash收集日志

cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf

logstash -f apache_log.conf -t #-t输出错误信息

---------------------- ELK Kiabana 部署(在 Apache/nginx节点上操作) ----------------------------------------

1.安装 Kiabana

Kiabana安装在随意主机,保证可以连接到ES数据库即可。

上传软件包 kibana-6.7.2-x86_64.rpm 到/opt目录

cd /opt
rpm -ivh kibana-6.7.2-x86_64.rpm

2.设置 Kibana 的主配置文件

vim /etc/kibana/kibana.yml

--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,配置es服务器的ip,如果是集群则配置该集群中master节点的ip
elasticsearch.url:  ["http://192.168.80.101:9200","http://192.168.80.102:9200"] 

--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
--96--取消注释,配置kibana的日志文件路径(需手动创建),不然默认是messages里记录日志
logging.dest: /var/log/kibana.log

3.创建日志文件,启动 Kibana 服务

kibana.log日志文件必须手动创建并且赋权kibana用户

touch /var/log/kibana.log
chown kibana:kibana /var/log/kibana.log
systemctl start kibana.service
systemctl enable kibana.service

netstat -natp | grep 5601

4.验证 Kibana

浏览器访问 http://192.168.80.103:5601


ELK 企业级日志分析系统_第16张图片

第一次登录需要添加一个 Elasticsearch 索引

Management -> Index Pattern -> Create index pattern
Index pattern 输入:access-*    #在索引名中输入之前配置的 Output 前缀“access”

ELK 企业级日志分析系统_第17张图片

Next step -> Time Filter field name 选择 @timestamp(时间戳) -> Create index pattern

ELK 企业级日志分析系统_第18张图片

ELK 企业级日志分析系统_第19张图片

单击 “Discover” 按钮可查看图表信息及日志信息。

ELK 企业级日志分析系统_第20张图片

数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果

ELK 企业级日志分析系统_第21张图片

---------------------- Filebeat+ELK 部署 ----------------------

Node1节点(2C/4G):node1/192.168.80.101                    Elasticsearch 
Node2节点(2C/4G):node2/192.168.80.102                    Elasticsearch
Kibana  Logstash节点:Kibana  Logstash/192.168.80.103   Kibana  Logstash
Filebeat节点:               filebeat/192.168.80.104                   Filebeat(Filebeat部署在要监控的web同一台服务器)  Apache 

1.安装 Filebeat

上传软件包 filebeat-6.7.2-linux-x86_64.tar.gz 到/opt目录

tar zxvf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64/ /usr/local/filebeat

2.设置 filebeat 的主配置文件

cd /usr/local/filebeat
vim /usr/local/filebeat/filebeat.yml

filebeat.inputs:
- type: log         #指定 log 类型,从日志文件中读取消息
  enabled: true
  paths:
    #- /var/log/messages        #指定监控的日志文件
    #- /var/log/*.log
    - /var/log/httpd/access_log #此处只监控httpd的日志
  tags: ["filebeat"]        #设置索引标签
  fields:           #可以使用 fields 配置选项设置一些 参数字段 添加到 output 中
    service_name: httpd
    log_type: access
    from: 192.168.80.104

--------------Elasticsearch output-------------------
(全部注释掉) 157行左右

----------------Logstash output---------------------
output.logstash:
  hosts: ["192.168.80.103:5044"]      #指定 logstash 的 IP 和端口

启动 filebeat 

nohup ./filebeat -e -c filebeat.yml > filebeat.out &
#-e:输出到标准输出,禁用syslog/文件输出
#-c:指定配置文件
#nohup:在系统后台不挂断地运行命令,退出终端不会影响程序的运行

若前台启动
./filebeat -e -c filebeat.yml

4.在 Logstash 组件所在节点上新建一个 Logstash 配置文件

cd /etc/logstash/conf.d
vim /etc/logstash/conf.d/filebeat.conf

input {
    beats {
        port => "5044"
    }
}

#filebeat发送给logstash的日志内容会放到message字段里面,logstash使用grok插件正则匹配message字段内容进行字段分割
#Kibana自带grok的正则匹配的工具:http://:5601/app/kibana#/dev_tools/grokdebugger
# %{IPV6}|%{IPV4} 为 logstash 自带的 IP 常量
filter {
  grok {
    match => ["message", "(?%{IPV6}|%{IPV4})[\s\-]+\[(?.*)\]\s+\"(?\S+)\s+(?.+)\"\s+(?\d+) \d+ \"(?.+)\" \"(?.*)\""]
  }
}

output {
    elasticsearch {
        hosts => ["192.168.80.101:9200","192.168.80.102:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" #引用系统预定义变量
    }
    stdout {
         codec => rubydebug
    }
}

启动 logstash

logstash -f /etc/logstash/conf.d/filebeat.conf
logstash -f /etc/logstash/conf.d/filebeat.conf -t #-t测试模式

5.浏览器访问

http://192.168.80.103:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引“httpd-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。ELK 企业级日志分析系统_第22张图片

 

选择索引,添加过滤 ,能够查看到更改添加到自定义字段,以及收集的其他字段

ELK 企业级日志分析系统_第23张图片 


 

你可能感兴趣的:(elk,运维,云计算,服务器,linux)