直接在日志文件中 grep、awk 就可以获得自己想要的信息。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上;问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块;一般是采用grep,awk,效率非常低下;如果有一套集中式日志系统,可以提高定位问题的效率;
大规模的分布式面临问题如下:
集群环境下的日志查询如何查询?日志量太大如何归档?文本搜索太慢怎么办?如何多维度查询?需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。 一个完整的集中式日志系统,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据传输-能够稳定的把日志数据传输到中央系统存储-如何存储日志数据分析-可以支持 UI 分析警告-能够提供错误报告,监控机制ELK是目前主流的一种日志系统;提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。 ELK是三个开源软件的缩写,分别表示:ElasticSearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。 ElasticSearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式(支持以 TCP/UDP/HTTP 多种方式收集数据)。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作,再一并 发往elasticsearch上去。 Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Filebeat隶属于Beats。目前Beats包含四种工具:
Packetbeat(搜集网络流量数据)Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)Filebeat(搜集文件数据)Winlogbeat(搜集 Windows 事件日志数据)java -version
从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户。
groupadd elk
useradd qixin passwd qixin
usermod -G elk qixin
visudo 找到root ALL=(ALL) ALL一行,添加qixin用户,如下。 ##Allow root to run any commands anywhere root ALL=(ALL) ALL qixin ALL=(ALL) ALL.
su qixin
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz tar -zxvf elasticsearch-6.2.3.tar.gz
mv elasticsearch-6.2.3/ elasticsearch sudo chown -R agan:elk ./
修改network.host和http.port vi config/elasticsearch.yml network.host: 0.0.0.0 http.port: 9200
su root
vi /etc/sysctl.conf 添加内容如下: vm.max_map_count=262144 sysctl -p
vi /etc/security/limits.conf 添加如下内容 *soft nofile 65536 *hard nofile 65536 *soft nofile 65536 *hard nofile 65536
su qixin
./elasticsearch -d
curl http://47.106.128.80:9200 http://47.106.128.80:9200/
ElasticSearch-head是一个H5编写的ElasticSearch集群操作和管理工具,可以对集群进行傻瓜式操作。 它提供了:
索引和节点级别操作搜索接口能够查询集群中原始json或表格格式的检索数据能够快速访问并显示集群的状态su root #要求在root下执行 curl -sL https://rpm.nodesource.com/setup_8.x | bash - yum install -y nodejs
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm install -g grunt npm install -g grunt-cli --registry=https://registry.npm.taobao.org --no-proxy
su qixin node -v npm -v grunt -version
cd /home/agan mkdir es wget https://github.com/mobz/elasticsearch-head/archive/master.zip unzip master.zip
cd elasticsearch-head-master sudo npm install -g cnpm --registry=https://registry.npm.taobao.org sudo cnpm install
vi config/elasticsearch.yml 添加如下内容 #增加新的参数,这样head插件可以访问es。设置参数的时候:后面要有空格 http.cors.enabled: true http.cors.allow-origin: “*”
vi Gruntfile.js 找到connect:server,添加hostname一项,如下:
connect: { server: { options: { hostname: '0.0.0.0', port: 9100, base: '.', keepalive: true } } }./elasticsearch -d
elasticsearch-head-master目录下: grunt server 或 npm run start
curl -XPUT http://47.106.128.80:9200/applog
http://47.106.128.80:9100/
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.tar.gz tar zxvf logstash-6.2.3.tar.gz mv logstash-6.2.3/ logstash
./bin/logstash -e ‘input { stdin { } } output { stdout {} }’
在 logstash的主目录下 vim config/log_to_es.conf 内容如下:
# For detail structure of this file # Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html input { # For detail config for log4j as input, # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html tcp { mode => "server" host => "47.106.128.80" port => 9250 } } filter { #Only matched data are send to output. } output { # For detail config for elasticsearch as output, # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html elasticsearch { action => "index" #The operation on ES hosts => "47.106.128.80:9200" #ElasticSearch host, can be array. index => "applog" #The index to write data to. } }./bin/logstash -f config/log_to_es.conf 或 后台运行守护进程 ./bin/logstash -f config/log_to_es.conf &
curl ‘http://47.106.128.80:9200/_search?pretty’
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz tar zxvf kibana-6.2.3-linux-x86_64.tar.gz mv kibana-6.2.3-linux-x86_64.tar.gz/ kibana
vim config/kibana.yml 把以下注释放开,使配置起作用。 server.port: 5601 server.host: “192.168.1.245” elasticsearch.url: http://192.168.48.35:9200 kibana.index: “.kibana”
./bin/kibana
http://192.168.48.35:5601/app/kibana
配置日志输出logstash信息