首页 > 其他分享 >ELK日志分析系统

ELK日志分析系统

时间:2022-12-10 20:32:26浏览次数:47  
标签:opt ELK 系统 apache elasticsearch node1 日志 root #####

一、ELK概述

1、ELK概述

ELK是三个开源项目的首字母缩写,分别是:Elasticsearch、Logstash和Kibana

Elasticsearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。

Logstash是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到如Elasticsearch等存储库中

Kibana可以让用户在Elasticsearch中使用图形和图表对数据进行可视化操作

Elasticsearch 的核心是搜索引擎,所以用户开始将其用于日志用例,并希望能够轻松地对日志进行采集和可视化。有鉴于此,Elastic 引入了强大的采集管道 Logstash 和灵活的可视化工具 Kibana。

2、ELK用途

1.问题排查

2.监控和预警

3.数据分析

ELK架构:

ELK日志分析系统_Elastic

收集∶能够采集多种来源的日志数据

传输∶能够稳定的把日志数据解析过滤并传输到存储系统

存储∶存储日志数据

分析∶支持 UI分析

警告∶能够提供错误报告,监控机制

3、ELK工作原理

(1)在所有需要收集日志的服务器上部署Logstash; 或者先将日志进行集中化管理在日志服务器上, 在日志服务器上部署 Logstash。

也可以使用轻量级的日志收集器filebeat。

(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。

(3)Elasticsearch 对格式化后的数据进行索引和存储。

(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

二、ELK日志分析系统集群部署

服务器类型

IP地址

安装的组件

Node1节点

192.168.246.77

Elasticsearch、Kibana

Node2节点

192.168.246.97

Elasticsearch

Apache节点

192.168.246.177

Logstash、Apache

1、配置域名解析,java环境

vim /etc/hosts
192.168.246.77 node1
192.168.246.97 node2

[root@node1 ~]# java -version
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)

2、安装Elasticsearch软件

#####上传elasticsearch-5.5.0.rpm到/opt下#####
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm rh
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm

#####加载系统服务#####
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service

#####修改elasticsearch主配置文件#####
#备份原配置文件
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster #17行取消注释,指定集群名字
23 node.name: node1 #23行取消注释,指定节点名字
33 path.data: /data/elk_data #33行取消注释,指定数据存放路径
37 path.logs: /var/log/elasticsearch/ #37行取消注释,指定日志存放路径
43 bootstrap.memory_lock: false #43行取消注释,改为在启动的时候不锁定内存
55 network.host: 0.0.0.0 #55行取消注释,设置监听地址,0.0.0.0代表所有地址
59 http.port: 9200 #59行取消注释,ES服务默认监听端口9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
#68行取消注释,集群发现通过单播,指定发现的节点node1,node2
[root@node1 opt]# grep -v "^#" /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"]

#####创建数据存放路径并授权#####
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/

#####启动elasticsearch#####
[root@node1 opt]# systemctl start elasticsearch.service
[root@node1 opt]# netstat -auntp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 35161/java

2.1查看节点信息

浏览器访问192.168.246.77:9200、192.168.246.97:9200,查看节点node1、node2信息

浏览器访问192.168.246.77:9200/_cluster/health?pretty、192.168.246.97:9200/_cluster/health?pretty,查看集群健康状态,status为green表示节点健康运行

浏览器访问192.168.246.77:9200/cluster/state?pretty,检查集群状态信息

{
"cluster_name" : "my-elk-cluster",
"version" : 3,
"state_uuid" : "JSZaZwYVTh6ftSFFRytpsQ",
"master_node" : "Lrcd6j-CRPyJGNHeMX-j1A",
"blocks" : { },
"nodes" : {
"Lrcd6j-CRPyJGNHeMX-j1A" : {
"name" : "node1",
"ephemeral_id" : "RbysFbP4Sri4LA8uC8uhfQ",
"transport_address" : "192.168.246.77:9300",
"attributes" : { }
},
"Qdhj6pawQg2r7fWHR-qMRA" : {
"name" : "node2",
"ephemeral_id" : "X_TAhcnbTaO78vWjFJOgmQ",
"transport_address" : "192.168.246.97:9300",
"attributes" : { }
}
},
"metadata" : {
"cluster_uuid" : "oxfu1okdScWUI0UYqPLE_g",
"templates" : { },
"indices" : { },
"index-graveyard" : {
"tombstones" : [ ]
}
},
"routing_table" : {
"indices" : { }
},
"routing_nodes" : {
"unassigned" : [ ],
"nodes" : {
"Qdhj6pawQg2r7fWHR-qMRA" : [ ],
"Lrcd6j-CRPyJGNHeMX-j1A" : [ ]
}
}
}

3、安装Elasticsearch-head插件

安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs

​node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到​

#####编译安装node#####
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm node-v8.2.1.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2 rh
[root@node1 opt]# yum -y install gcc gcc-c++ make
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make && make install

#####安装phantomjs#####
cd /opt
[root@node1 opt]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/

#####安装Elasticsearch-head数据可视化工具#####
[root@node1 bin]# cd /opt
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

#####修改Elasticsearch主配置文件#####
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true #开启跨域访问支持,默认为false
http.cors.allow-origin: "*" #指定跨越访问允许的域名地址为所有

systemctl restart elasticsearch

#####启动elasticsearch-head服务#####
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败
[root@node1 elasticsearch-head]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
[1] 2221
[root@node1 elasticsearch-head]#
> [email protected] start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
netstat -natp |grep 9100 

#####通过Elasticsearch-head查看Elasticsearch信息#####
通过浏览器访问192.168.246.77:9100/、192.168.246.97:9100/

#####插入索引#####
[root@node1 elasticsearch-head]# curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type:application/json' -d '{"user":"meimei","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}
浏览器访问192.168.246.77:9100/查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。

4.1、ELK Logstash部署

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

#####更改主机名#####
[root@localhost ~]# hostnamectl set-hostname apache

#####安装Apache服务(httpd)#####
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd

#####安装java环境#####
[root@apache ~]# yum -y install java
[root@apache ~]# java -version
openjdk version "1.8.0_352"
OpenJDK Runtime Environment (build 1.8.0_352-b08)
OpenJDK 64-Bit Server VM (build 25.352-b08, mixed mode)

#####安装logstash#####
[root@apache opt]# ls
logstash-5.5.1.rpm rh
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm
[root@apache opt]# systemctl start logstash.service
[root@apache opt]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

4.2、测试logstash

Logstash 命令常用选项:

-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。

-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。

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

定义输入和输出流:

#输入采用标准输入,输出采用标准输出(类似管道)

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
#执行完成后输入下面地址
www.baidu.com #标准输入
2022-12-09T10:41:35.581Z apache www.baidu.com #标准输出
www.sohu.com #标准输入
2022-12-09T10:41:58.126Z apache www.sohu.com #标准输出
www.google.com #标准输入
2022-12-09T10:42:14.466Z apache www.google.com #标准输出

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
www.baidu.com
{
"@timestamp" => 2022-12-09T10:46:48.824Z,
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
www.google.com
{
"@timestamp" => 2022-12-09T10:47:05.630Z,
"@version" => "1",
"host" => "apache",
"message" => "www.google.com"

[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.246.77:9200"] } }'
#使用 Logstash 将信息写入 Elasticsearch 中
www.baidu.com
www.sohu.com
www.google.com
结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.246.77:9100/ 查看索引信息和数据浏览

ELK日志分析系统_elasticsearch_02

5、定义logstash配置文件

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

###格式###
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中###
[root@apache opt]# chmod +r /var/log/messages #让logstash可以读取日志
[root@apache opt]# vim /etc/logstash/conf.d/system.conf
input {
file {
path =>"/var/log/messages" #指定要收集的日志位置
type =>"system" #自定义日志类型标识
start_position =>"beginning" #表示从开始处收集
}
}
output {
elasticsearch { #输出到elasticsearch
hosts => ["192.168.246.77:9200"] #指定elasticsearch服务器的地址和端口
index =>"system-%{+YYYY.MM.dd}" #指定输出到elasticsearch的索引格式
}
}

[root@apache opt]# systemctl restart logstash

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

ELK日志分析系统_apache_03

6、Kibana部署(node1)

[root@node1 elasticsearch-head]# cd /opt
[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm

#####设置Kibana主配置文件#####
[root@node1 opt]# vim /etc/kibana/kibana.yml
2 server.port: 5601 #2行取消注释,Kibana服务的默认监听端口为5601
7 server.host: "0.0.0.0" #7行取消注释,设置Kibana的监听地址,0.0.0.0代表所有地址
21 elasticsearch.url: ["http://192.168.246.77:9200"] #取消注释,配置es服务器的IP,若是集群则配置master节点的IP
30 kibana.index: ".kibana" #取消注释,设置在elasticsearch中添加.kibana索引

#####启动Kibana服务#####
[root@node1 opt]# systemctl start kibana.service
[root@node1 opt]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
[root@node1 opt]# netstat -natp | grep 5601
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 81162/node

#####验证Kibana#####
浏览器访问http://192.168.2.22:5601
第一次登录需要添加一个 Elasticsearch 索引:Index name or pattern
输入:system-* #在索引名中输入之前配置的 Output 前缀“system”
单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果

#####将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示#####
[root@apache opt]# 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" {
elasticsearch {
hosts => ["192.168.246.77:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.246.77:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache opt]# cd /etc/logstash/conf.d/
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf

浏览器访问 http://192.168.246.77:9100 查看索引是否创建

浏览器访问 http://192.168.246.77:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-,并单击“Create”按钮。在用相同的方法添加 apache_error-索引。
选择“Discover”选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。

三、Filebeat+ELK部署

服务器

IP地址

需要安装的组件

node1节点

192.168.246.77

Elasticsearch、Kibana

node2节点

192.168.246.97

Elasticsearch

apache节点

192.168.246.177

Logstash、Apache

filebeat节点

node1

Filebeat

上传软件包 filebeat到/opt

[root@node1 opt]# tar zxvf filebeat-6.6.0-linux-x86_64.tar.gz
[root@node1 opt]# mv filebeat-6.6.0-linux-x86_64/ /usr/local/filebeat

#####设置filebeat主配置文件
cd /usr/local/filebeat
[root@node1 filebeat]# cp filebeat.yml ./filebeat.yml.bak
[root@node1 filebeat]# vim filebeat.yml
filebeat.prospectors:
- type: log #指定 log 类型,从日志文件中读取消息
enabled: true
paths:
- /var/log/messages #指定监控的日志文件
- /var/log/*.log
fields: #可以使用 fields 配置选项设置一些参数字段添加到 output 中
service_name: filebeat
log_type: log
service_id: 192.168.246.77

--------------Elasticsearch output-------------------
(全部注释掉)

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

#####在 Logstash 组件所在节点上新建一个 Logstash 配置文件#####
[root@apache conf.d]# cd /etc/logstash/conf.d
[root@apache conf.d]# vim logstash.conf
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => ["192.168.246.77:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}

###启动logstash###
logstash -f logstash.conf 

浏览器访问 http://192.168.246.77:5601 登录 Kibana

单击“Create Index Pattern”按钮添加索引“filebeat-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。


标签:opt,ELK,系统,apache,elasticsearch,node1,日志,root,#####
From: https://blog.51cto.com/u_15768428/5927842

相关文章