ELK 部署:
介绍:
ELK 是 Elasticsearch + Logstash + Kibana 这种架构的简写. 这是一种日志分平台析的架构. 从前我们用 shell 三剑客 (grep, sed, awk) 来分析日志, 虽然也能对付大多数场景, 但当日志量大, 分析频繁, 并且使用者可能不会 shell 三剑客的情况下, 配置方便, 使用简单, 并且分析结果更加直观的工具 (平台) 就诞生了, 它就是 ELK. ELK 是开源的, 并且社区活跃, 用户众多
架构说明:
1, Elasticsearch + Logstash + Kibana
这是一种最简单的架构. 这种架构, 通过 logstash 收集日志, Elasticsearch 分析日志, 然后在 Kibana(web 界面)中展示. 这种架构虽然是官网介绍里的方式, 但是往往在生产中很少使用.
2 ,Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比, 这种架构增加了一个 filebeat 模块. filebeat 是一个轻量的日志收集代理, 用来部署在客户端, 优势是消耗非常少的资源(较 logstash), 所以生产中, 往往会采取这种架构方式, 但是这种架构有一个缺点, 当 logstash 出现故障, 会造成日志的丢失.
3, Elasticsearch + Logstash + filebeat + Redis(也可以是其他中间件, 比如 kafka) + Kibana
这种架构是上面那个架构的完善版, 通过增加中间件, 来避免数据的丢失. 当 Logstash 出现故障, 日志还是存在中间件中, 当 Logstash 再次启动, 则会读取中间件中积压的日志. 目前我司使用的就是这种架构, 我个人也比较推荐这种方式.
步骤:
一, 安装 jdk 环境 (Elasticsearch,logstash 服务都需要 jdk 环境)
jdk 介绍:
a,JDK (Java Development Kit) 是 Java 语言的软件开发工具包(SDK). 在 JDK 的安装目录下有一个 jre 目录, 里面有两个文件夹 bin 和 lib, 在这里可以认为 bin 里的就是 jvm,lib 中则是 jvm 工作所需要的类库, 而 jvm 和 lib 合起来就称为 jre.
b,JRE(Java Runtime Environment,Java 运行环境), 包含 JVM 标准实现及 Java 核心类库. JRE 是 Java 运行环境, 并不是一个开发环境, 所以没有包含任何开发工具(如编译器和调试器)
c,JVM 是 Java Virtual Machine(Java 虚拟机)的缩写, JVM 是一种用于计算设备的规范, 它是一个虚构出来的计算机, 是通过在实际的计算机上仿真模拟各种计算机功能来实现的.
1. 下载 JDK
JDK 官网下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
请根据自己服务器情况下载对应版本, Linux 是下载 tar.gz 结尾的包
2. 上传 Linux 服务器
把 JDK 包上传服务器有多种方法, 我是用 Xshell 自带的 ftp 功能上传服务器, 比较简单, 这边不多讲.
上传完成后, 解压到 / usr/local/
- tar xf jdk-8u191-Linux-x64.tar.gz -C /usr/local/
- # 在 / usr/local / 下会生成一个 jdk 的目录
3. 设置环境变量
在 / etc/profile 配置文件中, 在底部添加如下配置
- VIM /etc/profile
- #set java environment
- JAVA_HOME=/usr/local/jdk1.8
- CLASSPATH=.:$JAVA_HOME/lib.tools.jar
- PATH=$JAVA_HOME/bin:$PATH
- export JAVA_HOME CLASSPATH PATH
- [[email protected] ~]# source /etc/profile
- # 加载新声明的环境变量
4. 查看版本:
- [[email protected] ~]# java -version
- java version "1.8.0_162"
- Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
- Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
- # 获取以上信息, 表示安装完成
二, 安装 Redis
介绍:
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统.
Redis 是一个开源的使用 ANSI C 语言编写, 遵守 BSD 协议, 支持网络, 可基于内存亦可持久化的日志型, Key-Value 数据库, 并提供多种语言的 API.
它通常被称为数据结构服务器, 因为值 (value) 可以是字符串 (String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets) 等类型
安装步骤:
1, 安装环境, 下载, 解压, 编译
2, 修改配置
3, 启动, 登录
安装环境, 下载, 解压, 编译
- # 下载
- wget http://download.redis.io/redis-stable.tar.gz
- yum -y install gcc
- tar xf Redis-stable.tar.gz -C /usr/local/
- cd /usr/local/Redis-stable
- # 编译安装
- make && make install
修改配置:
- cd /usr/local/Redis-stable
- VIM Redis.conf
- # 表示只可以本机访问, 要是远程访问需要注释掉(前面加 #号)
- bind 127.0.0.1
- # 改为 no 可以不用输入密码登陆
- protected-mode yes
- # 修改端口
- port 6379
- # 改为 yes 后台运行
- daemonize no
- # 连接密码修改, foobared 密码
- requirepass foobared
启动登录:
- cd /usr/local/Redis-stable
- # 启动
- ./src/Redis-server ./Redis.conf
- # 关闭
- ./src/Redis-cli -p 6379 shutdown
- # 登录
- ./src/Redis-cli -h 127.0.0.1 -p 6379
三, 安装 Elasticsearch
介绍
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎, 一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎. 当然 Elasticsearch 并不仅仅是 Lucene 那么简单, 它不仅包括了全文搜索功能, 还可以进行以下工作:
1. 分布式实时文件存储, 并将每一个字段都编入索引, 使其可以被搜索.
2. 实时分析的分布式搜索引擎.
3. 可以扩展到上百台服务器, 处理 PB 级别的结构化或非结构化数据.
安装步骤
1. 下载, 解压
2. 修改 Linux 内核, 设置资源参数
3. 修改配置
4. 启动 Elasticsearch, 自启动脚本
5. 安装中文分词
下载, 解压
- # 下载
- wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.tar.gz
- cd /data
- tar xf Elasticsearch-6.6.1.tar.gz
- # 创建用户, 需要以普通用户启动
- useradd elk
- # 创建目录, 用于存放数据和日志
- cd /data/Elasticsearch-6.6.1
- mkdir data logs
修改 Linux 内核, 设置资源参数
- VIM /etc/sysctl.conf
- # 增加
- vm.max_map_count=655360
- # 执行以下命令, 确保生效配置生效:
- sysctl -p
设置资源参数
- VIM /etc/security/limits.conf
- # 修改
- * soft nofile 65536
- * hard nofile 131072
- * soft nproc 65536
- * hard nproc 131072
- # 设置用户资源参数
- VIM /etc/security/limits.d/20-nproc.conf
- # 设置 elk 用户参数
- elk soft nproc 65536
修改配置
cd /data/Elasticsearch-6.6.1
VIM config/Elasticsearch.YAML
- # 修改, 取消以下配置注释
- path.data: /data/Elasticsearch-6.6.1/data # 数据目录
- path.logs: /data/Elasticsearch-6.6.1/logs
- network.host: 0.0.0.0 # 允许哪个 IP 访问, 0 代表所有
- http.port: 9200
- chown -R elk:elk Elasticsearch-6.6.1
启动 Elasticsearch
- su elk
- cd /data/Elasticsearch-6.6.1
- # 加 - d: 后台启动
- ./bin/Elasticsearch
自启动脚本
- #!/bin/bash
- su - elk
- /data/Elasticsearch-6.6.1/bin/Elasticsearch -d
安装中文分词
- # 下载
- wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip
- # 创建 ik 目录
- mkdir /data/Elasticsearch-6.6.1/plugins/ik
- mv Elasticsearch-analysis-ik-6.6.1.zip Elasticsearch-6.6.1/plugins/ik
- cd /data/Elasticsearch-6.6.1/plugins/ik
- unzip Elasticsearch-analysis-ik-6.6.1.zip
四, 安装 kibana(将日志以 Web 界面形式展示)
- cd /data
- # 下载
- wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz
- # 解压
- tar xf kibana-6.6.1-Linux-x86_64.tar.gz
- cd kibana-6.6.1-Linux-x86_64
配置
VIM config/kibana.YAML
- # 取消以下注释, 并修改对应 IP
- # 服务端口
- server.port: 5601
- # 指明服务运行的地址
- server.host: "10.10.10.20"
- # 指明 Elasticsearch 运行的地址和端口
- Elasticsearch.hosts: ["http://10.10.10.20:9200"]
- # 指明 kibana 使用的索引, 这个是自定义的
- kibana.index: ".kibana"
- # 启动, 如果 Elasticsearch 有 kibana 数据, 则配置成功
- /data/kibana-6.6.1-Linux-x86_64/bin/kibana
五, 安装 filebeat
- # 该组件为日志收集服务, 安装在需要收集日志的服务器上# 下载
- wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.1-linux-x86_64.tar.gz
- # 解压
- tar xf filebeat-6.6.1-Linux-x86_64.tar.gz
- cd filebeat-6.6.1-Linux-x86_64
配置
VIM filebeat.YAML
- # 配置以下设置
- ## 该配置在 input 中定义多个日志路径, 用于之后的 logstash 过滤, 匹配不同索引
- filebeat.inputs:
- - type: log
- enabled: true
- paths:
- - /var/log/*.log
- fields:
- log_source: sys
- - type: log
- enabled: true
- paths:
- - /var/log/httpd/*_log
- fields:
- log_source: nginx
- output.Redis:
- hosts: ["10.10.10.20:6379"]
- password: ""
- db: 0
- key: "syslog"
日志输入{
filebeat.inputs: 模块用来指定日志文件的来源
type: 指定日志类型, 在这里是 log, 应该也可以是 JSON.
paths 指定日志文件路径.
fields: 是打标记, 主要为了后面日志分析查找的方便, 存储的时候也会根据 fields 分类存储, 相同 fields 的数据存在同一个 Redis key 中
}
日志输出{
output.Redis: 指定输出到 Redis
hosts: 指定 Redis 主机, 可以指定多台.
password:Redis 密码, Redis 默认没有密码, 在这里设为空就行
key: 指定存入 Redis 中的 key
db: 指定存在 Redis 中的 db 编号(Redis 默认安装有 16 个 databases,0~15, 默认是存储在 db0 中的)
- }
- # 启动
- ./filebeat -e -c filebeat.YAML
六, 安装 logstash(日志收集)
- # 下载并解压
- wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.tar.gz
- tar xf logstash-6.6.1.tar.gz
- cd logstash-6.6.1
- # 创建配置文件, 配置以下设置
- VIM config/syslog.conf
- # 该配置在 output 中使用 fields 标签匹配不同索引, 从而创建俩个不同的索引给 kibana 使用
- input {
- Redis {
- host => "10.10.10.20"
- port => 6379
- data_type => "list"
- key => "syslog"
- db => 0
- }
- }
- output {
- if [fields][log_source] == 'sys' {
- Elasticsearch {
- hosts => ["http://10.10.10.20:9200"]
- index => "syslog-%{ YYYY.MM.dd}"
- id => "syslog_id"
- }
- }
- if [fields][log_source] == 'nginx' {
- Elasticsearch {
- hosts => ["http://10.10.10.20:9200"]
- index => "nginxlog-%{ YYYY.MM.dd}"
- id => "nginx_id"
- }
- }
- }
1.key => "syslog" 对应 filebeat.YAML 配置中, Redis 设置的 key
2.if [fields][log_source] == 'sys' 对应 filebeat.YAML 配置中, input 设置 fields 标签
3.index => "nginxlog-%{ YYYY.MM.dd}" 创建 Elasticsearch 索引
- # 启动
- ./bin/logstash -f config/syslog.conf
访问 kibana, 并添加索引
访问: IP:5601, 没有密码, 密码认证需要收费, 可以使用 nginx 代理认证
创建索引:
点击 management
点击 Index Patterns
点击 Create index pattern
在当前配置页中会显示能添加的索引, 如果没有显示, 请查看 logstash 和 filebeat 配置
添加索引: nginxlog-* , 该索引为 Elasticsearch 中的索引
下一步: 选择 @timestamp
点击: Create index pattern 创建成功
查看日志:
点击: Discover
当前页就是搜索日志页面, 有切换索引, 添加搜索标签, 选择时间范围等功能
kibana 汉化
Kibana 在 6.7 版本以上, 支持了多种语言. 并且自带在安装包里, 之前版本需要下载中文包安装
Kibana 在 6.7 版本以下
- wget https://mirrors.yangxingzhen.com/kibana/Kibana_Hanization.tar.gz
- tar xf Kibana_Hanization.tar.gz
- cd Kibana_Hanization/old/
- python main.py /data/kibana-6.6.1-Linux-x86_64
Kibana 在 6.7 版本以上
- VIM /data/kibana-6.6.1-Linux-x86_64/config/kibana.YAML
- # 取消注释
- I18N.locale: "zh-CN"
- ELK
来源: http://www.bubuko.com/infodetail-3240816.html