ELK

 

27.1  ELK介绍  
27.2  ELK安装准备工作  
27.3  安装es  
27.4  配置es  
27.5  curl查看es  
27.6  安装kibana  
27.7  安装logstash  
27.8  配置logstash  
27.9  kibana上查看日志  
27.10  收集nginx日志  
27.11  使用beats采集日志

 

需求背景

业务发展越来越庞大,服务器越来越多
 各种访问日志、应用日志、错误日志量越来越多
 开发人员排查问题,需要到服务器上查日志,不方便
 运营人员需要一些数据,需要我们运维到服务器上分析日志

一、ELK介绍

官网https://www.elastic.co/cn/
 中文指南https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details
 ELK Stack (5.0版本之后) Elastic Stack == (ELK Stack + Beats)
 ELK Stack包含:ElasticSearch、Logstash、Kibana
 ElasticSearch是一个搜索引擎,用来搜索、分析、存储日志。它是分布式的,也就是说可以横向扩容,可以自动发现,索引自动分片,总之很强大。文档             https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
 Logstash用来采集日志,把日志解析为json格式交给ElasticSearch。
 Kibana是一个数据可视化组件,把处理后的结果通过web界面展示
 Beats在这里是一个轻量级日志采集器,其实Beats家族有5个成员
 早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计
 x-pack对Elastic Stack提供了安全、警报、监控、报表、图表于一身的扩展包,是收费的

ELK架构

2ab6c2eecd496619ccc2ad7f79a2861398c.jpg

 

二、 ELK安装准备工作

准备3台机器:

192.168.183.3 tobe01
192.168.183.33 tobe02
192.168.183.133 tobe03

角色划分:

3台全部安装elasticsearch(后续简称es) ,做个集群,其中1个主节点168.3,2个数据节点168.33,168.133
es主168.3上安装kibana 
1台es数据节点168.33上安装logstash 3台机器全部安装jdk8(openjdk即可)

给三台机器做主机名设定,方便查看和管理

13f54047ab64820167026f480d63fd2a425.jpg

tobe02机器上的jdk是在官网安装的jdk,无需更改,其他没安装的机器需要yum install -y java-1.8.0-openjdk 安装openjdk

c578b23f2f03ba333f1a191a32f479a8184.jpg

tobe01已经安装了,可以省略此步

8b5f58a8542c3226a9b1e4f9ea042f95ed7.jpg


三、ELK安装 – 安装es

官方文档 https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html


以下操作3台机器上都要执行


创建yum源,把KEY导入进来,简单说就是要导入密钥。 涉及到一个安全验证:    https://www.cnblogs.com/musang/p/5856259.html

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

   vim /etc/yum.repos.d/elastic.repo //加入如下内容,此处使用6.8.2版本

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install -y elasticsearch

也可以直接下载rpm文件,然后安装:这个是6.0版本的,可以下载所需版本

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
rpm -ivh elasticsearch-6.0.0.rpm

安装完成后,需要做启动服务和开机启动,启动前需要做配置,需要做成es的分布式集群 ,如下“配置es”

dcac35fc076639b29c12f80472a88d2a258.jpg

四、ELK安装 – 配置es

rpm -ql elasticsearch   查看安装了哪些文件


elasticsearch配置文件:

/etc/elasticsearch/elasticsearch.yml        elasticsearch本身相关的配置文件
/etc/sysconfig/elasticsearch   服务本身相关的配置

参考https://www.elastic.co/guide/en/elasticsearch/reference/6.0/rpm.html 
在tobe01上编辑配置文件   :

vim /etc/elasticsearch/elasticsearch.yml        //增加或更改

cluster.name: tobelinux 
node.name: tobelinux-01
node.master: true//意思是该节点为主节点
node.data: false    是否是数据节点
network.host: 192.168.183.3    最好只监听内网ip, 0.0.0.0是监听全部ip
discovery.zen.ping.unicast.hosts: ["192.168.183.3", "192.168.183.33", "192.168.183.133"]        自动发现,可以写ip地址和主机名,主机名在定义hosts的情况下可以使用

303f065300dfb5a20059fce20193895875a.jpg

2406cf0aec69a527259331a51996c141728.jpg

scp elasticsearch.yml tobe02:/tmp/  传到另外两台机器后进行修改,或者直接在另外两台修改配置文件

在tobe02和tobe03上同样编辑配置文件:


vim /etc/elasticsearch/elasticsearch.yml    //增加或更改

cluster.name: tobelinux 
node.name: tobelinux-02     #tobe03是 tobelinux-03 
node.master: false
node.data: true
network.host: 192.168.183.33        #tobe03是192.168.183.133
discovery.zen.ping.unicast.hosts: ["192.168.183.3", "192.168.183.33", "192.168.183.133"]

启动elasticsearch服务:

先启动主节点在启动数据节点:        systemctl start elasticsearch        注意防火墙

ps aux |grep elasticsearch   查看进程是否启动,如果没有启动,查看日志文件

端口9200和9300

f575db380b5f220dd33eef716ef32828844.jpg

日志文件:

/var/log/elasticsearch   正常启动后,会在此目录生成日志文件
less /var/log/messages   失败后,如果上面的目录没有文件,可以再此处查看是否报错

注意此处是否需要在前面加export

修改后要source /etc/profile

4d6e1902367c2d48e0de1a644f1fabfb2a5.jpg

ELK安装 – 安装x-pack(可省略):

3台机器上都要执行
 cd /usr/share/elasticsearch/bin/ (可省略)
 ./elasticsearch-plugin install x-pack //如果速度慢,就下载x-pack压缩包(可省略)
 cd /tmp/; wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.0.0.zip (可省略)
 ./elasticsearch-plugin install  file:///tmp/x-pack-6.0.0.zip (可省略)
 启动elasticsearch服务
 systemctl enable elasticsearch.service
 systemctl start elasticsearch.service
 以下操作只需要在130上执行
 安装x-pack后就可以为内置用户设置密码了,如下
 /usr/share/elasticsearch/bin/x-pack/setup-passwords interactive (可省略)
 curl localhost:9200 -u elastic //输入密码,可以查看到输出信息(可省略)

五、ELK安装 – curl查看es

 tobe01上执行 :

curl '192.168.183.3:9200/_cluster/health?pretty' 健康检查,写绑定的内网ip

green代表这个集群没有问题

curl '192.168.183.3:9200/_cluster/state?pretty'   集群详细信息,引号中的内容也可以在浏览器中直接访问

参考 http://zhaoyanblog.com/archives/732.html

cb1ac71e3e25ca18f45f79b60d67d99d39e.jpg

六、ELK安装 – 安装kibana

tobe01:

版本号需要和Elasticsearch 相同
查看版本号:
rpm -qa elasticsearch kibana

以下只需要在tobe01上执行:
前面已经配置过yum源,这里就不用再配置了
安装kibana,成图像的工具:

yum install -y kibana 
若速度太慢,可以直接下载rpm包
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-x86_64.rpm
rpm -ivh kibana-6.0.0-x86_64.rpm

kibana同样也需要安装x-pack(可省略)
安装方法同elasticsearch的x-pack
cd /usr/share/kibana/bin (可省略)
./kibana-plugin install x-pack //如果这样安装比较慢,也可以下载zip文件(可省略)
wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.0.0.zip//这个文件和前面下载的那个其实是一个(可省略)
./kibana-plugin install file:///tmp/x-pack-6.0.0.zip (可省略)
kibana是jenkins、jumpserver、zabbix等工具的图形界面
没有安装x-pack是不安全的,下面配置文件监听ip时,只监听内网ip
想在公网访问,可以使用nginx做代理,做代理的同时加安全认证


以下在tobe01,主上执行:


vim /etc/kibana/kibana.yml //增加或修改

server.port: 5601  默认端口5601
server.host: 192.168.183.3
elasticsearch.url: "http://192.168.183.3:9200"   主节点

logging.dest: /var/log/kibana.log        定义输出日志,默认在messages中
touch /var/log/kibana.log; chmod 777 /var/log/kibana.log  如果在配置文件中定义了日志路径才做此操作

0c4c2905181227f5d9930e54ca8ee44fb79.jpg

配置完成启动:

systemctl start kibana

查看进程和端口: 端口5601

浏览器里直接访问http://192.168.183.3:5601/

用户名elastic,密码为之前你设置过的密码(如果未安装x-pack,不需要用户名密码)
若无法输入用户名密码,查日志/var/log/kibana.log
出现错误  Status changed from uninitialized to red - Elasticsearch is still initializing the kibana index.
解决办法:curl -XDELETE http://192.168.183.3:9200/.kibana -uelastic

c95ede3c4e98e9e46659225e98585f917c4.jpg

七、ELK安装 – 安装logstash

以下在tobe02上执行:


logstash需要先安装java8,目前不支持java9
直接yum安装(配置源同前面es的源)

yum install -y logstash //如果慢,就下载rpm包,注意版本

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.rpm
rpm -ivh logstash-6.0.0.rpm
logstash也需要安装x-pack(可省略)
cd /usr/share/logstash/bin/(可省略)
./logstash-plugin  install file:///tmp/x-pack-6.0.0.zip (可省略)

logstash收集syslog系统日志:
以下在tobe02上操作:
编辑子配置文件

vim /etc/logstash/conf.d/syslog.conf    //编辑的文件都放到conf.d目录下,以.conf结尾,可以进行识别,加入如下内容

input {        #进入的源
  syslog {
    type => "system-syslog"
    port => 10514  
  }
}
output {    #输出到哪里去
  stdout {
    codec => rubydebug
  }
}

检测配置文件是否有错,目录都在/usr/share/下
cd /usr/share/logstash/bin

./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit

--path.settings 指定主配置文件所在目录,找logstash.yml
-f  指定配置的logstash相关的文件
--config.test_and_exit  检查完成后退出

 

以下在tobe02上操作:

vim /etc/rsyslog.conf//在#### RULES下面增加一行

*.* @@192.168.183.33:10514   把所有类型的文件都输出到10514端口

4fc9008bb5751bfcc8d0b9fc9bec00a517f.jpg

前台形式启动logstash

cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf    //这样可以在屏幕上查看到日志输出,不能敲命令

再开一个终端:

systemctl restart rsyslog

检测是否开启10514端口:netstat -lntp

b20543fb47868ba1d8defdfffea500c7561.jpg

从tobe01ssh到tobe02上,可以在logstash前台的终端上看到ssh登录的相关日志
结束logstash,在前台的那个终端上按ctrl c

刚刚显示日志输出的屏幕可以看到输出的日志,以json格式显示

73c36e9ba0e3230a75c85d60ff01a887a21.jpg

八、配置logstash

以下在tobe02上操作:

编辑配置文件

vim /etc/logstash/conf.d/syslog.conf    //配置文件,把内容改为如下

input {
  syslog {
    type => "system-syslog"
    port => 10514  
  }
}
output {
  elasticsearch {
    hosts => ["192.168.183.3:9200"]        
    index => "system-syslog-%{+YYYY.MM}"     #定义索引
  }
}

检测:

cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit

systemctl start logstash     //启动需要一些时间,启动完成后,可以看到9600端口和10514端口已被监听


ls /var/log/logstash/logstash-plain.log 日志文件
ls /etc/logstash/logstash.yml logstash  配置文件

查询日志时,发现没有内容写入,查看启动用户是logstash,日志文件的属主属组都是root,导致无法写入日志,无法查看错误日志

c508643cb56fac94b22d92947102900f7be.jpg

更改属主:

chown logstash /var/log/logstash/logstash-plain.log

systemctl restart logstash  重启后,发现另外的文件也没有权限

logstash-plain.log

63c1497366ddf112143a38b5e1336732bbd.jpg

adccdcae4dcf3e13ba685928d0ff34fb387.jpg

更改属主:

chown -R logstash /var/lib/logstash/

systemctl restart logstash

dd812cbb4202f828923313e648c590aec54.jpg

此时可以看到9600端口和10514端口已被监听

9d6907238142aafb090f358786d7cd19978.jpg

tobe01上执行:

curl '192.168.183.3:9200/_cat/indices?v' 可以获取索引信息
curl -XGET '192.168.183.3:9200/system-syslog-2019.08?pretty' 可以获指定索引(system-syslog-2019.08)详细信息
curl -XDELETE 'localhost:9200/logstash-xxx-*' 可以删除指定索引

bd9e2aee2609e18e6af10591b7b54df2465.jpg

九、kibana上查看日志

配置索引:

浏览器访问192.168.183.3:5601,到kibana配置索引

左侧点击“Managerment”-> “Index Patterns”-> “Create Index Pattern”
Index pattern这里需要根据前面curl查询到的索引名字(system-syslog-2019.08)来写,此处写成:system-syslog-*,用*表示所有,否则下一步的按钮是无法点击的,时间过滤器字段名称:@timestamp
这个操作是把es中的索引,放到kibana中去,在kibana中查看日志,可以根据需求增加索引

可以在Discover中选择对应的索引去查看日志,这个日志对应的是/var/log/message中的日志

此处的日志信息和message中的数据是相同的

99b15a2bd949c1fe6f6b23f104e652457f3.jpg

十、logstash收集nginx日志

在tobe02安装logstash的机器上做新得配置文件nginx.conf:

编辑配置文件

vim /etc/logstash/conf.d/nginx.conf    //加入如下内容

input {        
  file {    #直接指定一个文件
    path => "/tmp/elk_access.log"
    start_position => "beginning"
    type => "nginx"
  }
}
filter {        #对日志进行过滤
    grok {    #定义日志输出格式
        match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => ["192.168.183.33:9200"]
    index => "nginx-test-%{+YYYY.MM.dd}"
  }
}

检测配置文件是否有错:

cd /usr/share/logstash/bin
 ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit

yum install -y nginx   如果没有nginx,需要安装

有的话,直接写一个虚拟主机的配置文件:


 vim /etc/nginx/conf.d/elk.conf//写入如下内容

server {
            listen 80;
            server_name elk.tobe.com;

            location / {
                proxy_pass      http://192.168.183.3:5601;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            access_log  /tmp/elk_access.log main2;        #此处定义的日志路径是和/etc/logstash/conf.d/nginx.conf配置文件对应的
        }

定义main2的日志格式:

cd /etc/nginx
vim /etc/nginx/nginx.conf    //增加如下内容

log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$upstream_addr" $request_time';

nginx -t 检测
nginx -s reload

systemctl restart nginx

看是否需要重启logstash :systemctl restart logstash 

9af67a915bfd628c7601c63c60ad5cc8b7d.jpg

绑定hosts 192.168.183.33 elk.tobe.com

浏览器访问elk.tobe.com

检查日志文件是否生成

87eb7a86bb7e598c6da58991d252bb08a44.jpg

 

tobe01上检查是否有nginx-test开头的索引生成 :

curl '192.168.183.3:9200/_cat/indices?v'

如果有,才能到kibana里去配置该索引

4b784fa836cf9b9cd03f131bd26fa66e876.jpg

左侧点击“Managerment”-> “Index Patterns”-> “Create Index Pattern”
Index pattern这里写nginx-test-*,创建完之后点击左侧的Discover,选择对应的nginx-test日志,会显示生成的nginx的日志

bf2f98ce358c064ef91f7c7f3b483d16923.jpg

十一、使用Beats采集日志---Filebeat

可扩展,支持自定义构建 https://www.elastic.co/cn/products/beats
在tobe03上执行:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm
rpm -ivh  filebeat-6.0.0-x86_64.rpm

filebeat日志文件:

ls /var/log/filebeat/filebeat

首先编辑配置文件:
vim /etc/filebeat/filebeat.yml //增加或者更改,注意语法缩进的空格,使其在屏幕上做一个简单的输出

filebeat.prospectors:    
- type: log
   paths:
     - /var/log/messages

1997ab9729e425102a32ec7aa516ecbea56.jpg

output.console:
 enable: true

4b356cf96b1ace931b2a5e9de7a30d8289b.jpg

配置完成:

/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml     //可以在屏幕上看到对应的日志信息  -c指定配置文件

此时会在终端上把/var/log/messages中产生的日志显示出来

再编辑配置文件,已服务的角色出现


vim /etc/filebeat/filebeat.yml     //增加或者更改

此处不变:
filebeat.prospectors:    
- type: log
   paths:
     - /var/log/messages

更改此处:

output.elasticsearch:
  hosts: ["192.168.183.3:9200"]

开启filebeat:

systemctl start filebeat

fdac915a25d2b2785ce39db6d4c12aba05e.jpg

在tobe01上查看filebeat索引:

curl '192.168.183.3:9200/_cat/indices?v'

f7a7ffd347f1d5157d2f9b141a294767e67.jpg

到kibana里去配置该索引:

左侧点击“Managerment”-> “Index Patterns”-> “Create Index Pattern”
Index pattern这里写filebeat-*,创建完之后点击左侧的Discover,选择对应的filebeat日志

803ca528104d49887bd29114c18a8bfc018.jpg

扩展部分

x-pack 收费,免费  http://www.jianshu.com/p/a49d93212eca
https://www.elastic.co/subscriptions
Elastic stack演进  http://70data.net/1505.html
基于kafka和elasticsearch,linkedin构建实时日志分析系统 http://t.cn/RYffDoE  
使用redis http://blog.lishiming.net/?p=463
ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台  https://www.cnblogs.com/delgyd/p/elk.html
http://www.jianshu.com/p/d65aed756587

转载于:https://my.oschina.net/u/4093217/blog/3092580

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值