linux

ELK系列之一:安装和基本使用

2019-02-20  本文已影响18人  小六的昵称已被使用

title: ELK系列之一:安装和基本使用
categories: Linux
tags:
- ELK
timezone: Asia/Shanghai
date: 2019-02-02


ELK介绍

需求背景:

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

为什么要用到ELK:

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。
但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,
面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。
需要集中化的日志管理,所有服务器上的日志收集汇总。
常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,
大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,
构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制

ELK简介:

ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana , 它们都是开源软件。
不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent)
Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,
目前由于原本的ELK Stack成员中加入了 Beats 工具所以已改名为Elastic Stack。

为什么被采集端使用 Filebeat ,而不用原来的 Logstash 呢?

原因很简单,资源消耗比较大。
由于 Logstash 是跑在 JVM 上面,资源消耗比较大
后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级的 Agent 叫 Logstash-forwarder。
后来作者加入 elastic.co 公司, Logstash-forwarder 的开发工作给公司内部 GO 团队来搞,最后命名为 Filebeat。
Filebeat 需要部署在每台应用服务器上,可以通过 Salt 来推送并安装配置。
image image

整体架构

Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。

Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Filebeat:轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

环境

[root@centos181002 httpd]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

[root@centos181001 home]# java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

Elastic Stack 6.6.0

第一步:系统初始化设置

1.关闭系统默认防火墙(支持REHL\CentOS6和7)

setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off

2.安装JDK环境

Elasticsearch requires Java 8 or later. Use the official Oracle distribution or an open-source distribution such as OpenJDK.

官方建议使用Oracle JDK1.8.0.131或更高,这里我们使用的是1.8.0.192

# 解压并重命名
tar vxf jdk-8u192-linux-x64.tar.gz
mv jdk1.8.0_192 jdk

# 修改环境变量并提前备份原始文件
/bin/grep 666666 /etc/profile && /bin/cp /etc/profile.666666 /etc/profile || /bin/cp /etc/profile /etc/profile.666666
cat <<EOF >>/etc/profile
export JAVA_HOME=/home/jdk
export CLASSPATH=.:\${JAVA_HOME}/jre/lib/rt.jar:\${JAVA_HOME}/lib/dt.jar:\${JAVA_HOME}/lib/tools.jar
export PATH=\$PATH:\${JAVA_HOME}/bin
EOF
source /etc/profile

第二步:安装Elasticsearch

配置文件:/etc/elasticsearch/

启动日志:/var/log/messages

默认日志:/var/log/elasticsearch

官方安装说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

1.下载并安装

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

2.修改配置文件

# 1.修改监听IP和监听端口
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml

network.host: 11.11.11.61
http.port: 9200


# 2.为elasticsearch设置jdk路径,否则启动时候会报错
cp /etc/sysconfig/elasticsearch /etc/sysconfig/elasticsearch.bak
vim /etc/sysconfig/elasticsearch

JAVA_HOME=/home/jdk

3.启动服务

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service

4.检查程序是否正常运行。

# 1.查看服务状态是否正常
systemctl status elasticsearch.service

# 2.查看监听端口是否正常(elasticsearch会监听9200和9300两个端口)
# 虽然我们这里是单机模式,不过9300一样会正常监听
# 9200则是数据传输时用的
# 9300端口是集群通信用的
netstat -lntp |grep java

# 3.查看进程是否正常
ps aux | grep elasticsearch

# 4.检查9200端口返回状态
# 也可以通过浏览器此地址测试:http://11.11.11.61:9200/
curl -X GET "11.11.11.61:9200/"

[root@centos181001 elasticsearch]# curl -X GET "11.11.11.61:9200/"
{
  "name" : "iI1f5lo",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "1QFZh0mDQHWmW5uJJnXixw",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

使用浏览器显示出来的也是一堆字符串,我们希望这些信息能以图形化的方式显示出来,那就需要安装kibana来为我们展示这些数据了。

第三步:安装Kibana

配置文件:/etc/kibana/

官方安装说明:https://www.elastic.co/guide/en/kibana/6.6/index.html

1.下载并安装

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-x86_64.rpm
rpm -ivh kibana-6.6.0-x86_64.rpm

2.修改配置文件

# 1.修改Kibana服务监听IP、监听端口、配置elasticsearch地址
# elasticsearch为es服务器的ip,如果是集群则配置该集群中主节点的ip
cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
vim /etc/kibana/kibana.yml

server.port: 5601
server.host: "11.11.11.61"
elasticsearch.hosts: ["http://11.11.11.61:9200"]

3.启动并设置开机自动启动

systemctl enable kibana
systemctl stop kibana
systemctl start kibana
systemctl status kibana

4.检查程序是否正常

# 1.检查默认监听端口
# 由于kibana是使用node.js开发的,所以进程名称为node
netstat -lntp |grep 5601

# 2.查看进程
ps aux | grep kibana

5.打开浏览器访问管理页面

打开浏览器里进行访问,由于我们并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的。

到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

http://11.11.11.61:5601

到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

第四步:安装Logstash

程序如果启动错误或者端口没有正常监听,可以到/var/log/message查看日志

1.下载安装

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.rpm
rpm -ivh logstash-6.6.0.rpm

2.安装以后先不要启动服务,先配置Logstash收集syslog日志并测试

1.创建文件并编辑

cat <<EOF >/etc/logstash/conf.d/syslog.conf
input {  # 定义日志源
  syslog {
    type => "system-syslog"  # 定义类型
    port => 10514    # 定义监听端口
  }
}

output {  # 定义日志输出
  stdout {
    codec => rubydebug  # 将日志输出到当前的终端上显示
  }
}
EOF
cat /etc/logstash/conf.d/syslog.conf

2.检查配置文件是否有错误

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

--path.settings 用于指定logstash的配置文件所在的目录
-f 指定需要被检测的配置文件的路径
--config.test_and_exit 指定检测完之后就退出,不然就会直接启动了

# 显示Configuration OK代表配置没问题
[root@centos181001 conf.d]# /usr/share/logstash/bin/logstash \
>         --path.settings /etc/logstash/ \
>         -f /etc/logstash/conf.d/syslog.conf \
>         --config.test_and_exit
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2019-02-02T03:06:08,558][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/var/lib/logstash/queue"}
[2019-02-02T03:06:08,582][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/var/lib/logstash/dead_letter_queue"}
[2019-02-02T03:06:09,714][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
Configuration OK
[2019-02-02T03:06:21,137][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

3.配置kibana服务器的ip以及配置的监听端口:

# 1.编辑并在#### RULES ####位置增加以下行(IP地址为本机监听IP地址和端口)
vim /etc/rsyslog.conf
*.* @@11.11.11.61:10514

# 2.重启rsyslog,让配置生效
systemctl restart rsyslog

4.指定配置文件,启动logstash测试

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

# 等待出现以下信息
[root@centos181001 conf.d]# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2019-02-02T03:16:57,098][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-02-02T03:16:57,192][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.6.0"}
[2019-02-02T03:16:57,259][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"b98c03ce-ca73-4b08-a392-653913d80883", :path=>"/var/lib/logstash/uuid"}
[2019-02-02T03:17:11,739][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2019-02-02T03:17:12,794][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x1b532bc9 run>"}
[2019-02-02T03:17:12,892][INFO ][logstash.inputs.syslog   ] Starting syslog udp listener {:address=>"0.0.0.0:10514"}
[2019-02-02T03:17:12,913][INFO ][logstash.inputs.syslog   ] Starting syslog tcp listener {:address=>"0.0.0.0:10514"}
[2019-02-02T03:17:13,011][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-02-02T03:17:13,751][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

5.检查10514端口是否已被监听

netstat -antp | grep 10514

6.用另外机器ssh登录到这台服务器,看看是否有日志输出

应该可以看到很多以JSON的格式打印的收集到的日志

3.配置Logstash

以上只是测试的配置,这一步我们需要重新改一下配置文件,让收集的日志信息输出到es服务器中,而不是当前终端

1.编辑配置文件

cat <<EOF >/etc/logstash/conf.d/syslog.conf
input {
  syslog {
    type => "system-syslog"
    port => 10514
  }
}

output {
  elasticsearch {
    hosts => ["11.11.11.61:9200"]  # 定义es服务器的ip
    index => "system-syslog-11.11.11.61-%{+YYYY.MM}" # 定义索引
  }
}
EOF
cat /etc/logstash/conf.d/syslog.conf

2.为Logstash手动指定JAVA_HOME,否则启动程序会报错

cp /usr/share/logstash/bin/logstash.lib.sh /usr/share/logstash/bin/logstash.lib.sh.bak
vim /usr/share/logstash/bin/logstash.lib.sh
JAVA_HOME=/home/jdk

3.检测配置文件是否有错误

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

4.将以下两个文件夹所有者改为logstash,否则启动的时候会因为没有权限报错

chown -R logstash:logstash /var/log/logstash/
chown -R logstash:logstash /var/lib/logstash/

5.修改Logstash默认监听IP

cp /etc/logstash/logstash.yml /etc/logstash/logstash.yml.bak
vim /etc/logstash/logstash.yml
http.host: "11.11.11.61"

4.测试OK后启动并设置开机自动启动

systemctl enable logstash
systemctl stop logstash
systemctl start logstash
systemctl status logstash

5.检查是否是否正常启动

# 1.检查进程
ps aux |grep logstash

# 2.查看服务状态
systemctl status logstash

# 3.查看监听端口
netstat -antp | grep -E '9600|10514'

6.可以使用以下命令查看索引

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

# 这里可以看到上边我们配置的:
# index => "system-syslog-11.11.11.61-%{+YYYY.MM}" # 定义索引

第五步:登录Kibana查看

到这里我们已经可以实现了将本地的message日志归档并可使用Kibana查看

1.登录Kibana

http://11.11.11.61:5601

2.需要设置索引才能够查看。

    - Management 
    - Create index pattern 
    - 选择刚才添加索引名称,可以使用通配符,比如:system-syslog*,然后点击【Next step】
    - 选择【@timestamp】后点击【Create index pattern】

3.查看日志

    - Discover
        在这里可以跟在搜索框里搜索任意想要查找的日志内容。

第六步:使用Filebeat采集日志

之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beats轻量,所以官方也推荐使用beats来作为日志采集工具。而且beats可扩展,支持自定义构建。

这里我们新增一台测试服务器11.11.11.62来安装Filebeat并将日志发送到ES服务器

1.关闭系统默认防火墙(支持REHL\CentOS6和7)

setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off

2.下载安装

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

3.测试配置

1.先将配置文件备份

cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak

2.过滤掉#开头的备注内容和空行,方便修改查看

cat /etc/filebeat/filebeat.yml.bak | grep -v '^#' | grep -v '^  #' | grep -v '^$' > /etc/filebeat/filebeat.yml

3.修改配置文件

[root@centos181002 ~]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
# 本行注释掉
#  enabled: false

# 这里是日志路径可以有多条
  paths:
#    - /var/log/*.log
     - /var/log/messages
    #- c:\programdata\elasticsearch\logs\*

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 3

setup.kibana:

# 这里先注释掉,设定输出到控制台先测试
#output.elasticsearch:
#  hosts: ["localhost:9200"]

# 新增这里,让日志输出到控制台,以测试
output.console:  # 指定在终端上输出日志信息
  enable: true

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

4.修改完以上配置后执行以下命令,查看是否有日志输出,终端内有打印日志说明配置正常

/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml

4.修改为正式配置文件并启动程序

1.修给配置文件为以下内容

[root@centos181002 ~]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
# 本行注释掉
#  enabled: false

# 这里是日志路径可以有多条
  paths:
#    - /var/log/*.log
     - /var/log/messages
    #- c:\programdata\elasticsearch\logs\*

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 3

setup.kibana:

# 这里设定ES服务器地址
output.elasticsearch:
  hosts: ["11.11.11.61:9200"]

# 新增这里,让日志输出到控制台,以测试,测试部分注释掉
#output.console:  # 指定在终端上输出日志信息
#  enable: true

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

2.启动Filebeat服务并设置开机自动启动

systemctl enable filebeat
systemctl stop filebeat
systemctl start filebeat
systemctl status filebeat

3.查看服务是否正常

# 1.查看服务状态
systemctl status filebeat

# 2.查看进程
ps aux | grep filebeat

# 3.查看ES服务器上是否新增了一个以filebeat-6.0.0开头的索引
# 这就代表filesbeat和es能够正常通信了
curl '11.11.11.61:9200/_cat/indices?v' 

4.登录ES管理页面,配置索引,并查看日志。

- 登录页面:http://11.11.11.61:5601
- Management
- Index Patterns
- Create index pattern
- 填写Index pattern(索引模式,支持通配符,比如:filebeat-6.6.0*)后【Next step】
- Time Filter field name选择【@timestamp】后点击【Create index pattern】
- 到Discover可以查看系统收集到的日志。

5.在以上基础上增加httpd日志搜集

因为filebeat日志路径是支持多条的,所以这里只需要将需要采集的日志路径填入配置文件即可。

1.安装httpd

yum install -y httpd

2.修改filebeat配置文件以搜集httpd日志
httpd默认日志路径:/var/log/httpd/

vim /etc/filebeat/filebeat.yml
在paths:处增加以下内容:
- /var/log/httpd/

3.重启Filebeat服务并启动httpd服务

systemctl stop filebeat
systemctl start filebeat
systemctl start httpd
systemctl status filebeat httpd

4.打开浏览器访问httpd服务,并到ES服务器查看是否有httpd日志被采集。

第六步:汉化

作者主页:https://github.com/anbai-inc

结语:到这里ELK的架设和简单使用基本OK,更深入的使用和其他内容将抽时间继续整理。

附录:

所用到离线包下载:https://pan.baidu.com/s/16uVQL-d5HdgjajzCpY2e3g

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

中文官网:https://www.elastic.co/cn/products

ELKstack中文指南:https://elkguide.elasticsearch.cn/logstash/examples/nginx-access.html

不错的文章(亿级 ELK 日志平台构建实践):http://blog.51cto.com/13527416/2117141

搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群:http://blog.51cto.com/zero01/2079879

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器:http://blog.51cto.com/zero01/2082794

上一篇下一篇

猜你喜欢

热点阅读