数据库

ELK虚拟机构建

2019-11-21  本文已影响0人  _str_

简介
是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。

Elasticserach
是一个基于Lucene的开源分布式搜索服务器。
特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源, 自动搜索负载等。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
在elasticsearch中,所有节点的数据是均等的。
弹性搜索,日志存储
logstash
部署在产生日志的应用服务器上,用于收集日志
是一个完全开源工具,可以对你的日志进行收集、过滤、分析,并将其存储供以后使用(如,搜索),logstash带有一个web界面,搜索和展示所有日志。
Kibana
通过WEB页面向用户展示。
是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,
Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志

image.png

如上图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

产生日志—>收集日志->存储日志->展示日志->查看日志

环境

master收集到日志后,会把一部分数据碎片到slave上(随机的一部分数据);
同时,master和slave又都会各自做副本,并把副本放到对方机器上,这样就保证了数据不会丢失。
如果master宕机了,那么客户端在日志采集配置中将elasticsearch主机指向改为slave,就可以保证ELK日志的正常采集和web展示。

Elasticsearch

1、基础环境安装:elk-node1和elk-node2同时操作
     rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/elasticsearch.repo
----------------------
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
 yum install -y elasticsearch  redis nginx  java
 java -version
-------------------------
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
2、配置部署
elk-node1 配置
 mkdir -p /data/es-data

修改属组

[root@elk-node1 ~]- chown  -R elasticsearch.elasticsearch /data/

vim /etc/elasticsearch/elasticsearch.yml //追加配置下面内容

cluster.name: huanqiu                            # 组名(同一个组,组名必须一致)
node.name: elk-node1                            # 节点名称,建议和主机名一致
path.data: /data/es-data                        # 数据存放的路径
path.logs: /var/log/elasticsearch/         # 日志存放的路径
bootstrap.mlockall: true                         # 锁住内存,不被使用到交换分区去(通常在内部不足时,休眠的程序内存信息会交换到交换分区)
network.host: 0.0.0.0                            # 网络设置
http.port: 9200                                    # 端口
discovery.zen.ping.multicast.enabled: false    有一个内置的24地址用于组播通信 置为false就关闭了   关闭多播
discovery.zen.ping.unicast.hosts: ["10.18.41.31","10.18.41.137"]    主服务器和自己的地址
[root@elk-node1 ~]# systemctl  start elasticsearch       启动elasticsearch       
[root@elk-node1 ~]# systemctl enable elasticsearch
[root@elk-node1 ~]# systemctl  status elasticsearch
# netstat -antlp |egrep "9200|9300"
elk-node2配置

跟上面的node1 配置相同
只需改一下
vim /etc/elasticsearch/elasticsearch.yml //追加配置下面内容

cluster.name: huanqiu                            # 组名(同一个组,组名必须一致)
node.name: elk-node2                            # 节点名称,建议和主机名一致
path.data: /data/es-data                        # 数据存放的路径
path.logs: /var/log/elasticsearch/         # 日志存放的路径
bootstrap.mlockall: true                         # 锁住内存,不被使用到交换分区去(通常在内部不足时,休眠的程序内存信息会交换到交换分区)
network.host: 0.0.0.0                            # 网络设置
http.port: 9200                                    # 端口
discovery.zen.ping.multicast.enabled: false    有一个内置的24地址用于组播通信 置为false就关闭了   关闭多播
discovery.zen.ping.unicast.hosts: ["10.18.41.31","10.18.41.137"]    主服务器和自己的地址

3 安装插件1

elk-node1和elk-node2上都要安装
两台安装完毕并重启,再来进行访问和数据插入测试

  /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head       
最实用的通过web界面来查看elasticsearch集群状态信息 
-----------------------
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
---------------------
systemctl  restart  elasticsearch

启动
http://192.168.87.129:9200/_plugin/head/

3 安装插件2

 /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
----------------
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
----------------
systemctl  restart  elasticsearch

启动
http://192.168.87.130:9200/_plugin/kopf

logstash

部署在应用服务器上
elk-node1和elk-node2来模拟应用服务器。与分离部署本质的区别只是上报地址不同。

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
- vim /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
-  yum install -y logstash       126M大小
- systemctl start elasticsearch
- systemctl status elasticsearch
 /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }'
命令解释
        -e  执行。(后期用-f带脚本的形式执行)
        input{}  输入函数
        output{} 输出函数
        stdin{} 标准输入
        stdout{} 标准输出

--- 5.2 使用rubydebug详细输出

 /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug} }'
-------------------
输出形式
{
       "message" => "123456789",
      "@version" => "1",
    "@timestamp" => "2019-11-10T09:34:00.999Z",
          "host" => "localhost.localdomain"
}

--- 5.3 把内容写到elasticsearch中

 /opt/logstash/bin/logstash -e 'input { stdin{} } output {  elasticsearch { hosts => ["192.168.87.129:9200"]} }'
image.png

---- 5.4 即写到elasticsearch中又写在文件中一份

# /opt/logstash/bin/logstash -e 'input { stdin{} } output {  elasticsearch { hosts => ["192.168.87.129:9200"]} stdout{ codec =>  rubydebug}}'

- vim /etc/logstash/conf.d/01-logstash.conf
input { stdin { } }
output {
        elasticsearch { hosts => ["192.168.1.160:9200"]}
        stdout { codec => rubydebug }
}
   /opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf

--- 6.2 收集系统日志
1)编写logstash的配置文件
logstash收集文件的时候默认是从最后收集的,需要指定一下开始位置
logstash只会从最后寻找相比于上一次更新过的日志收集起来

- vim  file.conf
input {
    file {
      path => "/var/log/messages"
      type => "system"
      start_position => "beginning"  
    }
}
output {
    elasticsearch {
           hosts => ["192.168.1.160:9200"]
           index => "system-%{+YYYY.MM.dd}"    
    }
}

2)执行

- /opt/logstash/bin/logstash -f file.conf &
如果中断,就表示日志不在收集!所以需要放在后台执行~
 - vim  file.conf
` 多输入源,就多写几个input   请替换掉hosts地址 注意日志文件是否存在  type名称需要小写 `
input {
    file {
      path => "/var/log/messages"
      type => "system"
      start_position => "beginning"
    }
}
input {
    file {
       path => "/var/log/elasticsearch/huanqiu.log"
       type => "es-error"
       start_position => "beginning"
    }
}
output {
 
    if [type] == "system"{
        elasticsearch {
           hosts => ["192.168.87.129:9200"]
           index => "system-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "es-error"{
            elasticsearch {
               hosts => ["192.168.87.129:9200"]
               index => "es-error-%{+YYYY.MM.dd}"
            }
        }
}

---注意
如果你的日志中有type字段 那你就不能在conf文件中使用type

2)执行

-  /opt/logstash/bin/logstash -f file.conf &

4)多行模式

[root@elk-node1 ~]# vim multiline.conf
input {
    stdin {
       codec => multiline {        //多行模式。碰到指定模式之前,日志为无效。遇见模式时,才将模式之前的信息,收集成日志。
          pattern => "^\["        //模式
          negate => true        //无效
          what => "previous"     //之前
        }
    }
}
output {
    stdout {
      codec => "rubydebug"
     } 
}

执行命令:

 /opt/logstash/bin/logstash -f multiline.conf
-----------
在没有遇到[的时候,系统不会收集,只有遇见[的时候,才算是一个事件,才收集起来。
一般很少用到

kibana

- cd /usr/local/src    下载源码包
-  wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz  
- tar zxf kibana-4.3.1-linux-x64.tar.gz   解压
- mv kibana-4.3.1-linux-x64 /usr/local/
-  ln -s /usr/local/kibana-4.3.1-linux-x64/ /usr/local/kibana    创建软连接方便查找
- cd    /usr/local/kibana/config
- cp kibana.yml kibana.yml.bak
--------------------
-  vim kibana.yml 
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.160:9200"
kibana.index: ".kibana"
--------------------

运行
因为他一直运行在前台,要么选择开一个shell窗口,要么选择使用screen。
安装并使用screen启动kibana:

- yum -y install screen
- screen 
- /usr/local/kibana/bin/kibana
    [root@tivf18 root]# screen -r 8736    可以回到这个进程

2.然后点击上面的Discover,在Discover中查看:


image.png

3.查看日志登陆,需要点击“Discover”-->"message",点击它后面的“add”


image.png

4.这样,右边显示的日志内容的属性就带了message和path


image.png

5.点击右边日志内容属性后面隐藏的<<,就可将内容向前缩进


image.png
image.png

6.添加新的日志采集项,点击Settings->+Add New,比如添加system系统日志。注意后面的*不要忘了。
7.删除kibana里的日志采集项,如下,点击删除图标即可。


image.png
上一篇下一篇

猜你喜欢

热点阅读