elk
前言
- 做elk的优点:
提高安全性,集中存放日志,辅助故障排查,定位问题; - 架构组成:
------------>
browser(浏览器)- --kibana(日志分析web接口)---elasticsearch cluster(分布式多用户能力的全文搜索引擎服务器)----logstash(数据采集器,格式化转换输出..)---appserver(运行的服务)
- elk日志分析系统三大常用组件
elasticsearch
介绍:一个基于Lucene的搜索服务器。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
接近实时
集群
节点
索引
索引(库)—类型(表)----文档(记录)
分片和副本
logstash
介绍:
一款强大的数据处理工具,采集工具
可实现数据传输,格式处理,格式化输出
数据输入,数据加工(过滤,改写)以及数据输出
主要组件
shipper
indexer
broker
search and storage
web interface
各类插件地址:https://github.com/logstash-plugins
类型:
input类:也就是在input区域内定义使用的插件。
codec类:定于处理数据格式,如plain,json,json_lines等格式。这个可以定义在input、output区域中。
filter类:也就是在filter区域内定义使用的插件。
output类:也就是在output区域内定义使用的插件。
input类插件,常用的插件:file、tcp、udp、syslog,beats等。
①.file插件:
file插件字段解释:
codec => #可选项,默认是plain,可设置其他编码方式。
discover_interval => #可选项,logstash多久检查一下path下有新文件,默认15s。
exclude => #可选项,排除path下不想监听的文件。
sincedb_path => #可选项,记录文件以及文件读取信息位置的数据文件。~/.sincedb_xxxx
sincedb_write_interval => #可选项,logstash多久写一次sincedb文件,默认15s.
stat_interval => #可选项,logstash多久检查一次被监听文件的变化,默认1s。
start_position => #可选项,logstash从哪个位置读取文件数据,默认从尾部,值为:end。初次导入,设置为:beginning。
path => #必选项,配置文件路径,可定义多个。
tags => #可选项,在数据处理过程中,由具体的插件来添加或者删除的标记。
type => #可选项,自定义处理时间类型。比如nginx_log等
kibana
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
主要功能
elasticsearch 无缝之集成
整合数据,复杂数据分析
让更多团队成员受益
接口灵活,分享更容易
配置简单,可视化多数据源
简单数据导出
- 日志处理步骤
//将日志进行集中化管理
//将日志格式化(logstash)并输出到es服务
//对格式化后的数据进行索引和存储(elasticsearch)
//前端数据的展示(kibana)
apache | 20.0.0.16 |
nd1 | 20.0.0.17 |
nd1 /kibana | 20.0.0.18 |
一,20.0.0.17-18搭建ELK–es集群
两个节点配置步骤一样,我按照一台节点配置输出了;
20.0.0.17节点—20.0.0.18节点
步骤一:修改hosts文件,主机映射
1.更改host文件
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.17 nd1
20.0.0.18 nd2
2.将文件远程复制到nd2节点上
scp /etc/hosts root@20.0.0.18:/etc/hosts
//输入密码
3.查看下java环境是否支持
[root@nd1 ~]# 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)
步骤二:将软件包上传到本地目录
- 上传到/root/下了
软件包:
elasticsearch-5.5.0.rpm //elas软件
elasticsearch-head.tar.gz //数据可视化工具
node-v8.2.1.tar.gz //组件依赖包
phantomjs-2.1.1-linux-x86_64.tar.bz2 //前端框架
- 安装elastic软件
rpm -ivh elasticsearch-5.5.0.rpm
- 加载系统服务
systemctl daemon-reload
systemctl enbale elasticsearch.service
- 更改elasticsearch主配置文件
做备份:
cd /etc/elasticsearch/
cp -p elasticsearch.yml elasticsearch.yml.bak
更改配置:
vim elasticsearch.yml
17 cluster.name: my-elk-cluster
23 node.name: nd2
33 path.data: /data/elk_data
37 path.logs: /var/log/elk_log
43 bootstrap.memory_lock: false
55 network.host: 0.0.0.0
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["nd1", "nd2"]
//配置解释
//集群名称
//节点名称,不能一样,唯一的身份标识
//数据存放路径
//日志存放路径
//不在启动的时候锁定内存:锁定物理内存地址,防止es内存被交换出去,改成不允许,false
//提供服务绑定的ip地址,0.0.0.0代表所有地址
//监听端口9200
//集群发现通过单播实现
- 创建数据目录,日志存放目录
mkdir /data/elk_data
mkdri /var/log/elk_log
//更改文件属主,属组,让els有权限访问
//账号是rpm安装的时候自动建立的程序账户
chown elasticsearch.elasticsearch /data/elk_data
chown elasticsearch.elasticsearch /var/log/elk_log
- 重启服务,过滤端口
systemctl restart elasticsearch.service
netstat -antp |grep 9200
注意:
如果端口无法过滤出来,问题:配置文件的内容不一致,
如:
数据存放的目录是否存在?
日志文件是否存在?权限?
更改是不是格式不对?
好好检查配置文件内容!!!!!
步骤三:查看节点信息,检查集群健康和状态
//此步骤可以省略查看,后续还要可视化界面;
打开浏览器输入http://20.0.0.17:9200/ 查看节点信息
{
"name" : "nd1",
"cluster_name" : "my-elk-cluster",
"cluster_uuid" : "AXIGROSISnqxKh4pb3IxvA",
"version" : {
"number" : "5.5.0",
"build_hash" : "260387d",
"build_date" : "2017-06-30T23:16:05.735Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
打卡浏览器输入 http://20.0.0.17:9200/_cluster/health?pretty 检查集群健康和状态
{
"cluster_name" : "my-elk-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
步骤四:安装可视化工具
//另群集节点20.0.0.18也要装
//软件包在root宿主目录下
- 安装编译环境
yum -y install gcc gcc-c++ make - 编译安装node组件包
tar zxf node-v8.2.1.tar.gz
cd node-v8.2.1
./configure
make -j3 (等待时间较长)
make install
- 安装phantomjs //前端框架
cd
tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin //将命令文件,能够被系统识别
- 安装elasticsearch-head.tar.gz
cd ~
tar zxf elasticsearch-head.tar.gz
cd elasticsearch-head
npm install //npm安装模块的方式,前端工具
- 修改主配置文件
vim elasticsearch.yml
//在末尾添加
http.cors.enabled: true
http.cors.allow-origin: "*"
//配置解释
开启跨地域访问支持,默认为false
跨域访问允许访问的域名地址
-
重启服务
systemctl restart elasticsearch -
启动可视化工具
cd elasticsearch-head
[root@nd2 elasticsearch-head]# npm run start & //切换到后台运行
[1] 86579
[root@nd2 elasticsearch-head]#
> elasticsearch-head@0.0.0 start /root/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
- 过滤端口
[root@nd2 elasticsearch-head]# netstat -antp |grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 86589/grunt
输入20.0.0.17:9100 访问,可视化界面显示;
//实验环境未搭建keepalived,所以访问的是集群当中地址,生产环境应该是虚拟服务地址vip或代理服务器ip
添加索引
curl -XPUT ‘localhost:9200/index-demo/test/1?pretty&pretty’ -H ‘content-Type: application/json’ -d ‘{“user”:“zhangsan”,“mesg”:“hello world”}’
二,20.0.0.18 节点 搭建kibana
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
(实验环境,所以18是elas集群当中节点,又是当做kibana)
//将软件包上传到本地
rpm -ivh kibana-5.5.1-x86_64.rpm //安装
rpm -qc kibana //查看软件包配置文件位置
cd /etc/kibana/
cp kibana.yml kibana.yml.bak //备份配置
vim kibana.yml
2行:server.port: 5601 //端口
7:server.host: "0.0.0.0" //监听地址
21:elasticsearch.url: "http://20.0.0.17:9200" //和elas建立联系
30:kibana.index: ".kibana" //在elas中添加的索引名称
//启动服务
systemctl start kibana.service
systemctl enable kibana.service
//过滤端口
netstat -antp|grep 5601
三,20.0.0.16节点 搭建apache ,logstash
步骤一:环境准备
1.更改了主机名称
hostnamectl set-hostname as
bash
2.安装apache
yum -y install httpd
rpm -ql httpd //软件包的所有文件
//启动服务httpd
systemctl start httpd //启动服务之后,日志文件才产生
systemctl enable httpd
java -version //查看java环境jdk是否支持,无则安装yum -y install java
步骤二:安装logstash
Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”
//将软件包放到目录下
rpm -ivh logstash-5.5.1.rpm
//启动logstash
systemctl start logstash.service
systemctl enanle logstash.service
//命令文件,让系统能识别,必须是绝对路径
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
步骤三:做对接测试
logstash配置文件主要由三个部分组成:input, output, filter(根据需要)
logstash 选项
//选项:
-f:可以指定logstash的配置文件,根据配置文件配置logstash
-e: 后面跟着字符串,字符串可以当做logstash的配置 (如果是" " ,则默认使用stdin作为输入,stdout作为输出)
-t: 测试配置文件是否正确,然后退出
测试1:本地输入输出
logstash -e "input { stdin{} } output { stdout{} }"
.....等待.....(第一行error报错 log4j是java日志,不影响logstash)
this is zz //输入字符
2020-10-29T08:12:43.086Z as this is zz //输出字符
测试2:使用rubydebug显示详细输出,codec为一种编解码器
logstash -e "input { stdin{} } output { stdout{codec=>rubydebug} }"
.....等待.....(第一行error报错 log4j是java日志,不影响logstash)
this is aaa //输入字符
//输出字符如下:
{
"@timestamp" => 2020-10-29T08:17:34.050Z,
"@version" => "1",
"host" => "as",
"message" => "this is aaa"
}
测试3:本地输入,elas服务中输出
logstash -e "input { stdin{} } output { elasticsearch { hosts=>["20.0.0.17:9200"] } }"
.....等待.....(第一行error报错 log4j是java日志,不影响logstash)
this is yz //输入字符
浏览器查看:输入elas服务集群可视化工具ip20.0.0.17:9100
会产生logstash-2020.10.29的索引,和数据记录
测试4: 对Apache主机做对接配置,用系统日志文件测试
chmod o+r /var/log/messages //将系统日志让其他用户可以执行
//编写logstash配置
vi /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch{
hosts => ["20.0.0.17:9200"]
index => "system-%{+YYY.MM.dd}"
}
}
///配置解释:
input {
///输入
file{
//文件
path => "/var/log/messages" //日志文件位置
type => "system" //类型(索引)名称
start_position => "beginning" //从beginning开始
}
}
output {
//输出
elasticsearch{
//elas服务
hosts => ["20.0.0.17:9200"] //ip地址:实验环境集群当中的地址
index => "system-%{+YYY.MM.dd}"
}
}
两种方法加载配置:
1.重启服务
systemctl restart logstash.service
2.指定配置文件加载 //
cd /etc/logstash/conf.d/
logstash -f system.conf
验证:
会在es产生索引system,记录
5. apache做对接配置,监控日志文件;
logstash配置文件主要由三个部分组成:input, output, filter(根据需要)
vi /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 => ["20.0.0.17:9200"]
index => "apache_access-%{+YYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.17:9200"]
index => "apache_error-%{+YYY.MM.dd}"
}
}
}
//配置解释
input {
//下面解释跟上面system测试意思的操作差不多
}
output {
//输出
if [type] == "access" {
//如果类型栏是access
elasticsearch {
//输出elas服务上的记录格式
hosts => ["20.0.0.17:9200"]
index => "apache_access-%{+YYY.MM.dd}"
}
}
if [type] == "error" {
//如果类型栏是error
elasticsearch {
//输出elas服务上的记录格式
hosts => ["20.0.0.17:9200"]
index => "apache_error-%{+YYY.MM.dd}"
}
}
}
es验证生成定义的索引名称:
注意:
此时如果验证未出现索引,记录。需要httpd服务重启,或重载一下,再logstash指定配置文件加载到es
四,kibana验证
验证1
测试4: 对Apache主机做对接配置,用系统日志文件测试
可视化,更优化的查看日志
输入http://20.0.0.18:5601
进入kibana界面----会让你创建index name or pattern----输入es当中正确的索引名称system-*(不正确无法创建)----点击下方create创建
验证2
apache做对接配置,监控日志文件;
创建management ------index patterns------create index pattern 创建索引
//输入不正确的索引,无法创建!!!