文章目录
前言
通常当系统发生故障时,工程师需要登录到各个服务器上,使用 grep / sed / awk/ docker 等 Linux 脚本工具去日志里查找故障原因。在没有日志系统的情况下,首先需要定位处理请求的服务器,如果这台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志压缩归档策略等。
这样一系列流程下来,对于我们排查故障以及及时找到故障原因,造成了比较大的麻烦。因此,如果我们能把这些日志集中管理,并提供集中检索功能,不仅可以提高诊断的效率,同时对系统情况有个全面的理解,避免事后救火的被动。
一、ELK是什么?
E:ElasticSearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,Restful风格接口,多数据源,自动搜索负载等。
L:Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用
K:Kibana是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
二、安装使用步骤
1.安装JDK
1.1 将Oracle Java PPA添加到apt
sudo add-apt-repository -y ppa:webupd8team/java
1.2 更新apt包数据库
sudo apt-get update
1.3 使用这个命令安装Oracle Java 8的最新稳定版本(并接受弹出的许可协议)
sudo apt-get -y install oracle-java8-installer
现在已经安装了Java 8,让我们安装ElasticSearch。
2.安装Elasticsearch-6.1.1
Elasticsearch可以通过软件包安装。
2.1 执行以下命令下载Elasticsearch包
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.deb -P ~/
2.2 使用以下命令安装Elasticsearch
sudo dpkg -i ~/elasticsearch-6.1.1.deb
2.3 安装完成后编辑配置
sudo vim /etc/elasticsearch/elasticsearch.yml
You will want to restrict outside access to your Elasticsearch instance (port 9200), so outsiders can’t read your data or shutdown your Elasticsearch cluster through the HTTP API. Find the line that specifies network.host, uncomment it, and replace its value with “127.0.0.1” so it looks like this:
/etc/elasticsearch/elasticsearch.yml excerpt (updated)
network.host: 127.0.0.1
Save and exit elasticsearch.yml.
2.4 启动Elasticsearch
sudo systemctl restart elasticsearch
2.5 然后执行如下命令,在开机时启动Elasticsearch
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
2.6 检查Elasticsearch运行情况
curl http://localhost:9200
curl http://localhost:9200/_cat/indices
curl http://localhost:9200/_aliases?pretty=true
现在Elasticsearch已经启动并运行,让我们安装Logstash。
3.安装Logstash-6.1.1
Kibana可以通过软件包安装。
3.1 执行以下命令下载Logstash包
sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-6.1.1.deb -P ~/
3.2 使用以下命令安装Logstash
sudo dpkg -i ~/logstash-6.1.1.deb
3.3 配置Logstash
3.3.1 创建目录/app/logstash来保存sincedb文件
mkdir /app
cd /app
mkdir /logstash
chown -R logstash:logstash /app/logstash
3.3.2 创建Logstash配置文件
Logstash配置文件是json格式的,位于/etc/logstash/conf.d配置包括三个部分:输入、过滤器和输出。例如:
input {
file {
path => ["/app/logs/access.log"]
type => "test-access"
start_position => "beginning"
#/app/logstash must belongs to logstash -- chown -R logstash:logstash /app/logstash
sincedb_path => "/app/logstash/.test-access-sincedb"
ignore_older => 2592000 #one month
}
}
filter {
if [type] == "test-access" {
grok {
match => [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"]
overwrite => [ "message" ]
}
mutate {
convert => ["response", "integer"]
convert => ["bytes", "integer"]
convert => ["responsetime", "float"]
}
geoip {
source => "clientip"
target => "geoip"
add_tag => [ "nginx-geoip" ]
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
remove_field => [ "timestamp" ]
}
useragent {
source => "agent"
}
}
}
output{
if [type] == "test-access"{
elasticsearch {
hosts => ["localhost:9200"]
index => "test-access-logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
}
4.安装Kibana-6.1.1
Kibana可以通过软件包安装。
4.1 执行以下命令下载Kibana包
sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-6.1.1-amd64.deb -P ~/
4.2 使用以下命令安装Kibana
sudo dpkg -i ~/kibana-6.1.1-amd64.deb
4.3 启动Kibana服务
sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana
二、备份和恢复
1.备份ELK
1.1 安装存储库S3插件
sudo bin/elasticsearch-plugin install repository-s3
1.2 创建S3 credential (在提示处输入值)
sudo bin/elasticsearch-keystore add s3.client.default.access_key
sudo bin/elasticsearch-keystore add s3.client.default.secret_key
1.3 创建S3 repository
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XPUT 'localhost:9200/_snapshot/test_s3_repository?pretty' -H 'Content-Type: application/json' -d'
{
"type": "s3",
"settings": {
"bucket": "elk-repository-qa",
"region": "ap-northeast-1",
"compress": true
}
}
'
1.4 检查S3 repository
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XGET 'localhost:9200/_snapshot?pretty'
1.5 创建S3 snapshot
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XPUT 'localhost:9200/_snapshot/test_s3_repository/snapshot_1?wait_for_completion=true&pretty'
1.6 检查S3 snapshot
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XGET 'localhost:9200/_snapshot/test_s3_repository/snapshot_1?pretty'
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XGET 'localhost:9200/_snapshot/test_s3_repository/_all?pretty'
2.恢复ELK
2.1 关闭所有indices
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XPOST "localhost:9200/_all/_close?pretty"
2.2 恢复
curl -H "Authorization: Basic ZWxhc3RpYzpTdtFyMjAxNyoox=" -XPOST 'localhost:9200/_snapshot/test_s3_repository/snapshot_1/_restore?pretty'
总结
ELK可以使日志更加灵活,可以帮助coder完成更加的任务。动手试试吧!