日志分析------ELK日志分析apache服务

前言

  1. 做elk的优点:
    提高安全性,集中存放日志,辅助故障排查,定位问题;
  2. 架构组成:

------------>
browser(浏览器)- --kibana(日志分析web接口)---elasticsearch cluster(分布式多用户能力的全文搜索引擎服务器)----logstash(数据采集器,格式化转换输出..---appserver(运行的服务)
  1. 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 无缝之集成
整合数据,复杂数据分析
让更多团队成员受益
接口灵活,分享更容易
配置简单,可视化多数据源
简单数据导出

  1. 日志处理步骤
    //将日志进行集中化管理
    //将日志格式化(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)

步骤二:将软件包上传到本地目录

  1. 上传到/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                 //前端框架
  1. 安装elastic软件

rpm -ivh elasticsearch-5.5.0.rpm

  1. 加载系统服务

systemctl daemon-reload
systemctl enbale elasticsearch.service

  1. 更改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
//集群发现通过单播实现

  1. 创建数据目录,日志存放目录

mkdir /data/elk_data
mkdri /var/log/elk_log

//更改文件属主,属组,让els有权限访问
//账号是rpm安装的时候自动建立的程序账户

chown elasticsearch.elasticsearch /data/elk_data
chown elasticsearch.elasticsearch /var/log/elk_log

  1. 重启服务,过滤端口
    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宿主目录下

  1. 安装编译环境
    yum -y install gcc gcc-c++ make
  2. 编译安装node组件包
tar zxf  node-v8.2.1.tar.gz

cd  node-v8.2.1

./configure

make -j3  (等待时间较长)

make  install
  1. 安装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        //将命令文件,能够被系统识别
  1. 安装elasticsearch-head.tar.gz
cd ~

tar  zxf   elasticsearch-head.tar.gz 
 
cd   elasticsearch-head

npm install     //npm安装模块的方式,前端工具
  1. 修改主配置文件
vim elasticsearch.yml 

 //在末尾添加
http.cors.enabled: true
http.cors.allow-origin: "*"

//配置解释
开启跨地域访问支持,默认为false
跨域访问允许访问的域名地址
 
  1. 重启服务
    systemctl restart elasticsearch

  2. 启动可视化工具

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


  1. 过滤端口

[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 创建索引

//输入不正确的索引,无法创建!!!
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47320286/article/details/109367511