ELK

原创
2019/08/14 17:52
阅读数 155

 

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架构

 

二、 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即可)

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

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

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


三、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”

四、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的情况下可以使用

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

日志文件:

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

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

修改后要source /etc/profile

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

六、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  如果在配置文件中定义了日志路径才做此操作

配置完成启动:

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

七、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端口

前台形式启动logstash

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

再开一个终端:

systemctl restart rsyslog

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

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

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

八、配置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,导致无法写入日志,无法查看错误日志

更改属主:

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

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

logstash-plain.log

更改属主:

chown -R logstash /var/lib/logstash/

systemctl restart logstash

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

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-*' 可以删除指定索引

九、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中的数据是相同的

十、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 

绑定hosts 192.168.183.33 elk.tobe.com

浏览器访问elk.tobe.com

检查日志文件是否生成

 

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

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

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



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

十一、使用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

output.console:
 enable: true

配置完成:

/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

在tobe01上查看filebeat索引:

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

到kibana里去配置该索引:

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

扩展部分

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
展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部