Ubuntu 搭建ELK
一、简介
官网地址:https://www.elastic.co/cn/
官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据
二、准备工作
环境介绍
操作系统 | 主机名 | IP地址 | 相关软件 |
ubuntu-16.04.5-server-amd64 | jqb-node128 | 192.168.91.128 | elasticsearch,kibana |
ubuntu-16.04.5-server-amd64 | jqb-node128 | 192.168.91.128 | logstash,filebeat,nginx |
架构图
说明:
文本主要是采集Nginx的access日志。采集的方式有2中,分别是logstash和filebeat。
logstash依赖于java环境,比较重。而filebeat是一个轻量级的logstash,它不需要java环境。而且安装包比较小!
所以本文会分别介绍2中采集工具的使用方法!
镜像选择
本文所使用的镜像是ubuntu,注意:使用docker push镜像时,一定要加版本号!使用16.04
为什么呢?因为默认的是ubuntu是18.04,安装logstash的deb包时,会报错一个ruby错误!无法解决!
使用16.04就不会出现这个问题了!
elk版本选择
打开官网 https://www.elastic.co/cn/,目前最新版是6.4.3。那么就直接怼最新版,不要怂!
各个组件版本,统一为6.4.3
安装docker
本文所使用的几个组件,都是基于docker安装的。这样方便部署!
修改ubuntu更新源
2台服务器,修改ubuntu的更新源为阿里云。默认的更新源太慢了!
vim /etc/apt/sources.list
内容如下:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted
deb http://mirrors.aliyun.com/ubuntu xenial-security universe
deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse
更新资源
apt-get update
2台服务器都安装docker
apt-get install -y docker.io
修改镜像为阿里云
默认的更新源太慢了,所以这里直接使用阿里云的更新源
在2台服务器上面修改
vim /etc/docker/daemon.json
内容如下:
{
"registry-mirrors": [
"https://kv3qfp85.mirror.aliyuncs.com"
]
}
2台服务器都 重启docker服务
systemctl restart docker
下载软件包
登录到128服务器,创建目录,并下载软件包。待会dockerfile会用到!
mkdir /opt/elasticsearch
cd /opt/elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.deb mkdir /opt/kibana
cd /opt/kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-amd64.deb
如果下载速度比较慢,可以开迅雷下载,再上传到服务器!
复制sources.list,待会dockerfile会用到!
cp /etc/apt/sources.list /opt/elasticsearch/
cp /etc/apt/sources.list /opt/kibana/
登录到129服务器,创建目录,并下载软件包。待会dockerfile会用到!
mkdir /opt/logstash
cd /opt/logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.deb mkdir /opt/filebeat
cd /opt/filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.3-amd64.deb
复制sources.list,待会dockerfile会用到!
cp /etc/apt/sources.list /opt/logstash/
cp /etc/apt/sources.list /opt/filebeat/
三、安装elasticsearch
登录到128服务器,修改系统参数
vim /etc/sysctl.conf
修改参数vm.max_map_count,此参数必须修改,否则启动失败!
vm.max_map_count = 2621440
使用以下命令刷新
sysctl -p
请确保服务器有2G的可用内存!否则会导致elasticsearch启动失败!
创建dockerfile
vim /opt/elasticsearch/dockerfile
内容如下:
FROM ubuntu:16.04
# 修改更新源为阿里云
ADD sources.list /etc/apt/sources.list
ADD elasticsearch-6.4..deb ./
# 安装jdk和elasticsearch
RUN apt-get update && apt-get install -y openjdk--jdk --allow-unauthenticated && apt-get clean all && dpkg -i elasticsearch-6.4..deb && rm -rf elasticsearch-6.4..deb
EXPOSE
# 添加启动脚本
ADD run.sh .
RUN chmod run.sh
ENTRYPOINT [ "/run.sh"]
准备run.sh
vim /opt/elasticsearch/run.sh
内容如下
#!/bin/bash
set -e # 添加时区
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 设置权限
chown -R elasticsearch:elasticsearch /etc/elasticsearch # 判断目录是否存在,否则创建
if [ ! -d /var/lib/elasticsearch/data ];then
mkdir -p /var/lib/elasticsearch/data
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/data
fi
if [ ! -d /var/log/elasticsearch/logs ];then
mkdir -p /var/log/elasticsearch/logs
chown -R elasticsearch:elasticsearch /var/log/elasticsearch/logs
fi # 修改数据和日志目录
sed -i '33s@/var/lib/elasticsearch@/var/lib/elasticsearch/data@g' /etc/elasticsearch/elasticsearch.yml
sed -i '37s@/var/log/elasticsearch@/var/log/elasticsearch/logs@g' /etc/elasticsearch/elasticsearch.yml # 修改绑定ip和端口
sed -i '55s@#network.host: 192.168.0.1@network.host: 0.0.0.0@g' /etc/elasticsearch/elasticsearch.yml
sed -i '59s@#http.port: 9200@http.port: 9200@g' /etc/elasticsearch/elasticsearch.yml # 修改启动文件,去掉-d参数,避免后台运行
sed -i 's@-d -p $PID_FILE@-p $PID_FILE@g' /etc/init.d/elasticsearch # 启动elasticsearch,要hold住,否则容器启动就退出了!
/etc/init.d/elasticsearch start
此时, /opt/elasticsearch目录结构如下:
./
├── dockerfile
├── elasticsearch-6.4..deb
├── run.sh
└── sources.list
生成镜像
docker build -t elasticsearch-6.4. /opt/elasticsearch
启动容器
docker run -d -it --restart=always -p : elasticsearch-6.4.
等待几秒钟,查看端口是否起来了
root@jqb-node128:/opt/elasticsearch# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp6 0 0 :::9200 :::* LISTEN 13342/docker-proxy
tcp6 ::: :::* LISTEN /sshd
访问页面
http://192.168.91.128:9200/
效果如下:
按照网络大部分的文章来讲,这个时候,应该要安装elasticsearch-head插件。但是不好意思,目录的elasticsearch-head插件不支持elasticsearch6.x版本。
最高支持到elasticsearch5.x版本!
四、安装logstash
登录到129服务器,在安装logstash之前,先来安装Nginx
安装nginx
apt-get install -y nginx
安装好之后,默认就启动了。访问首页:
默认的access日志为
/var/log/nginx/access.log
安装logstash
创建dockerfile,内容如下:
FROM ubuntu:16.04
# 修改更新源为阿里云
ADD sources.list /etc/apt/sources.list
ADD logstash-6.4..deb ./
# 安装jdk和elasticsearch
RUN apt-get update && apt-get install -y openjdk--jdk --allow-unauthenticated && apt-get clean all && dpkg -i logstash-6.4..deb && rm -rf logstash-6.4..deb
EXPOSE
# 添加启动脚本
ADD run.sh .
RUN chmod run.sh
ENTRYPOINT [ "/run.sh"]
准备run.sh,内容如下:
#!/bin/bash # 添加时区
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 修改配置文件
sed -i '41s@# pipeline.workers: 2@# pipeline.workers: 1@g' /etc/logstash/logstash.yml
sed -i '45s@# pipeline.batch.size: 125@pipeline.batch.size: 125@g' /etc/logstash/logstash.yml sed -i '50s@# pipeline.batch.delay: 50@pipeline.batch.delay: 5@g' /etc/logstash/logstash.yml sed -i '64s@# path.config:@path.config: /etc/logstash/conf.d@g' /etc/logstash/logstash.yml sed -i '190s@# http.host: "127.0.0.1"@http.host: "0.0.0.0"@g' /etc/logstash/logstash.yml
sed -i '195s@# http.port: 9600-9700@# http.port: 9600@g' /etc/logstash/logstash.yml cp -r /etc/logstash /usr/share/logstash/config # 启动
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf
准备logstash.conf,内容如下:
input { file {
path => "/var/log/nginx/access.log"
type => "system"
start_position => "beginning"
}
} output {
elasticsearch {
hosts => ["192.168.91.128:9200"]
index => "system-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
参数解释:
input : 表示输入的内容 file: 表示类型为文件 path: 文件路径
type: 类型
start_position: 监听文件的起始位置,默认是end。beginning表示开始 output : 表示输出的内容 elasticsearch : 表示输出到elasticsearch
hosts: ip地址,这里的ELASTICSEARCH,待会会被run.sh替换为真正的地址,比如192.168.91.:
index: 索引值,index常用的%{+YYYY.MM.dd}这种写法必须读取@timestamp数据。这样写容易做分片,方便es删除历史数据!
stdout { codec => rubydebug } 开启debug日志输出
注意:调试阶段要先开启日志输出,否则无法知道有没有发送数据!
如果还想收集nginx错误日志,path还可以这么写
/var/log/nginx/*.log
因为error日志也在/var/log/nginx/目录下。
如果想收集/var/log里面的所有文件,可以这么写
/var/log/*/*
此时, /opt/logstash目录结构如下:
./
├── dockerfile
├── logstash-6.4..deb
├── logstash.conf
├── run.sh
└── sources.list
生成镜像
docker build -t logstash-6.4. /opt/logstash
启动容器
docker run -it --restart=always -p : -v "/opt/logstash:/etc/logstash/conf.d" -v /var/log:/var/log logstash-6.4.
注意:这里使用2个-v选项,用来挂载文件
logstash.conf 是配置文件,需要配置文件路径以及elasticsearch地址,注意要带端口号
/var/log 是日志文件,因为要监控nginx的日志,所以要把日志目录挂载到容器中
run.sh 启动时,会加载配置文件 /etc/logstash/conf.d/logstash.conf
等待几秒钟,查看端口是否起来了
root@jqb-node129:/opt/logstash# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx -g daem
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 192.168.91.129: 192.168.91.1: ESTABLISHED /sshd: root@no
tcp 192.168.91.129: 192.168.91.1: ESTABLISHED /
tcp6 ::: :::* LISTEN /nginx -g daem
tcp6 ::: :::* LISTEN /sshd
tcp6 0 0 :::9600 :::* LISTEN 41726/docker-proxy
访问页面
http://192.168.91.129:9600/
效果如下:
查看elasticsearch的数据
http://192.168.91.128:9200/_search?pretty
效果如下:
没有发现index值,数据是空的!
访问一下nginx页面,查看access日志是否有了
root@b304d87c93c4:/etc/logstash/conf.d# tail -f /var/log/nginx/access.log
192.168.91.1 - - [/Nov/::: +] "GET / HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
192.168.91.1 - - [/Nov/::: +] "GET /favicon.ico HTTP/1.1" "http://192.168.91.129/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
查看docker进程
root@jqb-node129:/opt/logstash# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b304d87c93c4 logstash-6.4. "/run.sh" minutes ago Up minutes 0.0.0.0:->/tcp inspiring_fermat
查看日志输出:
docker logs -t b304d87c93c4
输出如下信息:
{
"type" => "system",
"path" => "/var/log/nginx/access.log",
"@timestamp" => --15T10::.189Z,
"message" => "192.168.91.1 - - [15/Nov/2018:18:08:23 +0800] \"GET / HTTP/1.1\" 200 396 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36\"",
"@version" => "",
"host" => "b304d87c93c4"
}
{
"type" => "system",
"path" => "/var/log/nginx/access.log",
"@timestamp" => --15T10::.276Z,
"message" => "192.168.91.1 - - [15/Nov/2018:18:08:23 +0800] \"GET /favicon.ico HTTP/1.1\" 404 209 \"http://192.168.91.129/\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36\"",
"@version" => "",
"host" => "b304d87c93c4"
}
再次查看elasticsearch页面,发现数据已经有了!index值为system-2018.11.15
既然有了数据,就可以使用kin展示了!
查看索引
http://192.168.91.128:9200/_cat/indices?v
这个索引,就是接下来kabana要填的索引值。
更多api,请参考链接:
https://blog.csdn.net/hanyuyang19940104/article/details/81743459
五、安装kibana
登录到128服务器,创建dockerfile
内容如下:
FROM ubuntu:16.04
ADD kibana-6.4.3-amd64.deb ./
# 安装jdk和elasticsearch
RUN dpkg -i kibana-6.4.3-amd64.deb && rm -rf kibana-6.4.3-amd64.deb
EXPOSE 5601
# 添加启动脚本
ADD run.sh .
RUN chmod 755 run.sh
ENTRYPOINT [ "/run.sh"]
注意:kibana不需要安装jdk,直接安装deb包即可!
准备run.sh,内容如下:
#!/bin/bash # 添加时区
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone elasticsearch="192.168.91.128" # 修改配置文件
# 修改监听地址
sed -i '7s@#server.host: "localhost"@server.host: "0.0.0.0"@g' /etc/kibana/kibana.yml
# 去除注释
sed -i '28s@#elasticsearch.url: "http://localhost:9200"@elasticsearch.url: "http://localhost:9200"@g' /etc/kibana/kibana.yml
# 修改ip
sed -i "28s?localhost?$elasticsearch?g" /etc/kibana/kibana.yml # 启动
/usr/share/kibana/bin/kibana "-c /etc/kibana/kibana.yml"
此时, /opt/kibana目录结构如下:
./
├── dockerfile
├── kibana-6.4.3-amd64.deb
└── run.sh
生成镜像
docker build -t kibana-6.4. /opt/kibana
启动容器
docker run -d -it --restart=always -p : kibana-6.4.
等待几秒钟,查看端口是否起来了
root@jqb-node128:/opt/elasticsearch# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp6 ::: :::* LISTEN /docker-proxy
tcp6 0 0 :::5601 :::* LISTEN 2488/docker-proxy
tcp6 ::: :::* LISTEN /sshd
访问页面
http://192.168.91.128:5601
选择不参加体验计划
点击左边的Discover,下面已经提示了index值
将index值复制过来,选择下一步
时间选择@timestamp,点击创建
效果如下:
多刷新几次Nginx页面,刷10次。
效果如下:
如果数据较少,是不会出现这个页面的!
六、安装filebeat
下面演示如下使用filebeat
查看进程
root@jqb-node129:/opt/logstash# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b304d87c93c4 logstash-6.4. "/run.sh" minutes ago Up seconds 0.0.0.0:->/tcp inspiring_fermat
杀掉logsth的进程
docker rm b304d87c93c4 -f
由于时间关系,这里不演示使用docker了。直接服务器安装filebeat
dpkg -i filebeat-6.4.-amd64.deb
关于filebeat,主要是配置文件
/etc/filebeat/filebeat.yml
要修改的部分如下:
- type: log # Change to true to enable this input configuration.
enabled: false # Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/*.log
#- c:\programdata\elasticsearch\logs\* ... output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
修改后的的文件如下:
- type: log # Change to true to enable this input configuration.
enabled: true # Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/nginx/access.log
#- c:\programdata\elasticsearch\logs\* ... output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.91.128:9200"]
注意:enabled一定要配置为true,否则不会生效,不会发送日志
启动filebeat
systemctl start filebeat.service
查看elasticsearch数据,发现有filebeat的数据了
Ubuntu 搭建ELK的更多相关文章
- 使用Docker快速搭建ELK环境
今天由于Win系统的笔记本没带回家,其次Docker在非Linux系统下都需要安装额外的软件去镜像才行 所以感觉没有差别,先直接用Mac搭建一遍呢, 本篇部分命令和配置内容为摘抄 Mac下使用Dock ...
- ubuntu搭建DNS
ubuntu搭建DNS 一. bind简介: BIND是Domain Name System (DNS) 协议的一个实现,提供了DNS主要功能的开放实现,主要包括以下三种: *域名服务器 *D ...
- Ubuntu 搭建PHP开发环境
Ubuntu确实很好玩.有喜欢的命令行,简洁的界面,不同于Window要的感觉.偶尔换换环境工作,学习Linux的思维方式,是一种不错的做 法.之前也折腾过Ubuntu,不过,因为网络的问题,一直没有 ...
- ubuntu搭建svn服务器并htpp访问版本库并svn与web同步
Ubuntu搭建SVN服务器多版本库 1 介绍 Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可 ...
- Ubuntu搭建Anki服务器
Ubuntu搭建Anki服务器 第一步安装Anki 阿里云的服务器,xshell远程登录上 #以root用户进行操作 #安装Akni服务 easy_install AnkiServer #添加名为an ...
- Ubuntu搭建NFS服务器,NFS协议详细分析
目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 NFS(Network FileSystem,网 ...
- centos7搭建ELK Cluster集群日志分析平台(四):Fliebeat-简单测试
续之前安装好的ELK集群 各主机:es-1 ~ es-3 :192.168.1.21/22/23 logstash: 192.168.1.24 kibana: 192.168.1.25 测试机:cli ...
- centos7搭建ELK Cluster集群日志分析平台(三):Kibana
续 centos7搭建ELK Cluster集群日志分析平台(一) 续 centos7搭建ELK Cluster集群日志分析平台(二) 已经安装好elasticsearch 5.4集群和logst ...
- centos7搭建ELK Cluster集群日志分析平台(二):Logstash
续 centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 . 安装Java 8 官方说明:需要安装Java ...
随机推荐
- 图解HTTP(六)HTTP首部
一.HTTP报文的结构: 二.4种首部字段: 1. 通用首部字段 请求报文和响应报文都会使用的首部. 首部字段名 说明 Cache-Control 控制缓存行为 Connection 逐跳首部.连接的 ...
- Centos 7安装Python3.6
1> 安装python3.6可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...
- laravel 命令行输出进度条
有时候我们想在命令行执行一些耗时的命令,我们可以利用 symfony 提供的进度条相关的类,来输出一个进度条,显示当前的处理进度. 参考:http://symfony.com/doc/current/ ...
- python学习(23)requests库爬取猫眼电影排行信息
本文介绍如何结合前面讲解的基本知识,采用requests,正则表达式,cookies结合起来,做一次实战,抓取猫眼电影排名信息. 用requests写一个基本的爬虫 排行信息大致如下图 网址链接为ht ...
- Selenium--使用参考
Selenium--浏览器上的按键精灵 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可 ...
- PHP常见的字符串方法
PHP语言中的字符串函数也是一个比较易懂的知识.今天我们就为大家总结了将近12种PHP字符串函数,希望对又需要的朋友有所帮助,增加读者朋友的PHP知识库. 1.查找字符位置函数 strpos($s ...
- Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)
源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...
- python学习笔记2--list
一.list操作 list=['xiaohei','xiaobai','xiaohong']#定义一个数组 name=[]#定义一个空数组 #查 #下标是从0开始 print(list[1]) #-1 ...
- shell逐行读取excel并执行sql
背景:测试同学想根据一组user_id 获取token做测试,由于各种原因(数据量大,sql语句复杂),只能根据user_id一条条查,于是写了个脚本: 1, 先查询需要的user_id 导出到use ...
- 20155302 2016-2017-2 《Java程序设计》第七周学习总结
20155302 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 Lambda表达式的优点:更加紧凑的代码.修改方法的能力.更好地支持多核处理 "L ...