Caching, Logging and Monitoring

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] [Music] so welcome back guys um today what I would like to talk to you about are some optimization um that we could actually do to our code to improve things one of them would be of course cing and the next would be logging and monitoring so this more or less would give us insights as to what's going on in an application so we can know how best to fix problems and stuff like that when applications of course may be running in production because again we can't do things like log to the to the standard output you know so now we need some robust way to actually have insights into what's going on and so that's what we're going to do in this video I'll try to keep it short and of course still try to give you every possible information I think you might need so I would want to check out to I'll call this optimization oh I think I got that wrong optimization of course I need to Pro a new branch and we are now currently in this branch and maybe I just close this and now we'll just talk about uh caching and how we can actually proceed with this so if you're wondering what caching means so to be honest in very simple terms cash is still more or less what you do when you store file and say or when you store data in say a database for example the only only major difference actually in principle is that you would need a data store that is faster that's that is much much faster to retrieve data than your primary store so if you're caching for example if you're storing the data for your cash if it is if it's taking the same time as um it would for example if you had St that data there the database then of course the m has been defeated so the main point the C of the matter is that we still store data the way we would um while maybe storing in some primary store but the point is that it has to be a much much faster and quicker way to retrieve the data so because of course the whole idea is to improve um to reduce more or less latency reducing the time you know and resources required to fish this data from the original source and so again um the point is to improve response times to reduce the load on our server and of course also has to do with us improving scalability and of course for tolerance and for caching I would probably want to talk to you about a few things um this would more or less be like some caching strategies there are lots of it but I'll try to I would like to talk to you about these ones so there is um if I can type today there is Comm on that's IM memor cation there is distributed okay distributed C There is five Bas it's exactly what it sounds like that is file based and um that is of course CDN so I would really want to talk to you about this four I think this should be more than enough as to what you need to get started so with inmemory cing of course this is supposed to be like the fastest one because again remember we said the point would be that it should be still similar to data store but the the whole C of the matter is that it has to be much much faster and quicker to receive the data stored in it and that would make it of course an efficient C so that's why inmemory C should of course be the most um effective um efficient caching strategy um because of course this actually means that you're studing the data in the application memory so it provides like lightning fast access to the cach data but it's also really really important to know that caching using this strategy is of course really volatile you know because what it means is that when you restart your server for example then the whole data is lost um so um we can maybe just take it one after the other I'll show you like a quick way you can implement this if you want it to go in this way and then of course we'll wrap it up by talking about possible disad advantages and disadvantages why you may or may not want to go um this route per straightforward so to do that I'm just maybe going to come over here and create a simple applic and then we can play around with it and maybe I can yes I can come in down here and create a file and I call this um cash. go it's still going to be within package main of course come on go away it's going to still be within the package Main and so what we can do now more or less is to show an example as how we can do this so it's going to be pretty straightforward it's going to I'm not going to spend the whole evening just telling you how to maybe make this better of course um with the tutorials we've been doing so far I think this should you should be able to of course do something quite interesting so but we can call this cach some like this and um we can make a structure this way and now we can um decide what we want to store more or less so normally we could probably store this as a string so this would be um what we would want to store and maybe I call this cach data for example and then I can maybe of course Cas cash data always needs an exp expir time so after which um the data should just asire more or less be deleted actually that's the point so this will represent our cach data and now you can create our cach like this um we can use a sync map um credit like this so this is going to represent our cach and because with this sync MK of course we probably would should be able to more or less store our data using a key and a value because that's really the point and of course our value would be this and a key would be anything will give it um the time we we set this up I'm also guessing you know what a sync map is um more or less it's still a map but as you can see over here it also provides us with the mutex which means we can provide a lock to this cash and then um manage who reads and writes into this map that's really the point and so in down down here I can maybe of course create my main function I'm going to use capital M because I don't want it to to overlap with the one we have over here because again that should be the same there should be only one function with same name within a package anyways I'm also guessing you know that already and so in here more or less is where we would write our code so again I said this is going to be really really simple but I just wanted to show you how this could be set up so we set a value this way pretty straightforward cash. store we call the store um arguments and then of course we provide a key I can call this key one whatever and here I provide of course the the value and it's going to again like we say it's going to be of type cache data and value now this is where we if it's if we wanted to start let's say Jon for example we can um of course um serialize this into and encode this into a string and then we store the value in here so I'm just going to pretend like this was actually some some some um Json that we coded more or less and so I should be able to provide the values this way what am I doing so yes like this I have to skip this and I can call this name so this would be it's very simple Jason and it's going to be just say name Tony some like this and we are done so this is a Jason that we've encoded into a string and now we've sted it as simple as this and now we can of course retrieve this PRI straightforward again and now we have to more or less um use the load function so cash load again we provide the key call this key one um like this and um of course this should tell us more or less so we get two things back in value and of course a Boolean so I can say Val okay and we can of course remember always never never forget to handle errors so I would say if okay um where is the error um what happened [Music] um maybe I can do it this way okay so now we can of course handle it this way and we say if okay if everything is okay now maybe what we can actually do is to of course get the data and I can call this um maybe cached data like this and I get the value of cost and I need to provide um Time cast it more or less so it's going to be off cached data did I call this date oh that's my bad should be there actually what did I do seriously Tony Since You've Lost Your modu today um so of course Val like we call it earlier and now of course we have our data over here so this is supposed to be where we stored and now we can do some further um some further more or less if validation so we can for example validate thear time we can do something like if time. now I'll say before and then maybe we provide the data from our cache and this is just of more or less checking checking the expired time um you know so we can of course do further things we would want to do here so if for example we say um like something like this if this is not the case then here here we fmt so at this point our data has expired we can say cash has expired something like this whatever so but the point is um you see more or less we can actually use this pretty simple application as you can see over here to have this in in memory store to store our data and then we are able to of course set a value this way retrieve a value this is all we need actually to retrieve the value remember again this was just some additional thing we needed because we would want to handle scenarios whereby the expiration time is is over so now this is where you can actually say so if it has expired maybe now I can actually make a request to my database F an up toate data and then put this in the cach and then return to the user and of course you can do all of that using uh you can set up spin up p in New go routine to do the update for you more or less in the end and then decide how you want to proceed you have that option actually so yeah we could say fetch from theb and then you can maybe decide do you do we want to wait for the fetch more or less to now send it the user depending of course how critical or how important or whatever depend on the application You're Building how important it be to or if there should be changes for example and then we decide should we send the data should we send the user data we got from here or should we wait to fetch from DB and then send the user and after everything we can of course up here we update our cach simple as this and that's that's really straightforward again this is just some boiler plates more or L to show you how this could be done and maybe I can call this inm cach like this so this is one way we can do inm caching pretty straightforward um of course the next I would want to talk to you about would be distributed so distributed caching more or less really involves caching data in a separate dedicated caching system you know this is where you have he people talk about like red or M Cas D depending on what um the the the the option was for for example within that application and so this is really really useful like if you have like distributed or clustered environment where you have like different instances of your application needing to access the same cached data of course if you look at what we did with our inmemory cache if we have a fleet of servers that have been let's say managed by a kubernetes cluster then you would already imagine that each container would need to uh each container of course would use its own application memory to handle its own data and of course this would mean that if we are our Fleet of our servers of course is behind the load balancer then you can already imagine each of these servers would have different versions of their IM memory cache so but if we want everything of course from a a a distributed system then this is where we use um um distributed systems of course like um red or MD and um again these are really just simple key value stores you know and if you've never had anything to do with red it's pretty pretty pretty straightforward trust me I'm going to leave a link um so you can of course read more about radies but if you've ever done anything before with key store um like Dynamo debut or whatever you are already like a couple steps into the door more or less it's also pretty straightforward we can what I can do is maybe show you an example so I can create a new function here and I can call this distributed like this distributed should also be pretty straightforward and the only thing of course would be that would need to um you would would need to have radies more or less running in um a a depending on how setup is maybe in a container within our cluster and then we can of course then be able our should then be able to establish um a connection to This Server R server or whatever mkd using clients like the befitting client so in this case it would be like um R client more or less so what we can actually do is to um consure you PR forward and easy how it is actually to work with for example go radies so this will be the radi client in go I'm written this way I think it's up go Rus Rus like this and of of course the main thing here would be to create a client so this would be of course radius. new and I think I might need to um I think I might need to install this first so I can get intelligence um so I can say radi dot come on new client okay and now maybe I install this go go tidy and hopefully they should be able to take care of this for us and we have this installed awesome so now of course um this is not enough we need to provide some some configuration more or less as you can see over here so we do that it's also really pretty straightforward so is do options and then this is where I provide the options so now the address um this would be the address where our RIS server is running so we could of course download um radis run it locally or maybe even like um have everything of course if you're developing locally to maybe set up use do compost for example how run this on a separate um container and then application a separate container and then have it layers with one another however way the setup is we can then point our application here to the um address of the r server and um I'm going to assume that we have one running locally pretty straightforward like this so we provide um the address and of course we need to provide a password and and of course we need to provide um we can if we have a DB setup for example we can specify that here but we can also just put zero to let R more or less use the default database and in that case it would of course I'm guessing you can already imagine to Mak sense of course ittb here but um that's the case so now we have our client again create straightforward so to set a value like this is also like quite straightforward so we call color client. set this way like we did before I can call this again key1 and then value now this is where provide a value of course you can see here is an interface um let's say we also did something this way again I can just copy this and put it in here and that's totally fine and of course the last thing we need to add here will be the expiration because again it's pretty pretty important that every value you store in in a cash should have an inspiration time you don't want to cash data and then save it to your client for the next one month even when data has already changed this would of course be a really bad um way to go you know but I can maybe say I want to store my data for I don't know for two minutes maybe like this and that's that's really all we need to do to set a value the next thing of course will be to handle error which should be um pretty straightforward if you ask me so we can handle error like this so if error like this and then of course we need to have air over here like this is this a method I don't think it is yeah of course it returns an error like this and now we say if this is not equal to n if this is not equal to n fmt again I'm not handling this I'm just doing leaving it this way so you can take care of this before so but again this is all we need to add add save add a value to our client so we have a client that set and really really does it that's pretty straightforward and again to retrieve this value again pretty straightforward um we still use of course the same clients we say client. getet again we provide the key key one and that's really all and what we get back should of course be our results again we get to handle our error more guess more or less and let's let's just to be sure yes read this commments I can call this maybe results like this we have our result and now we can handle our error I'm just going to maybe copy this again put it in here and I say if if this error is not new and I print um think I canot say result dot error like this and then of course I need to put this in here and now I think we can get our value just from result dot um what is it file yes I think we this is one way of course we can retrieve our value and return this back to to our user um the only difference of course is that um with r this we don't have to handle data expiration and everything on our own we can take care of it this way and of course here um we what we can of course already also do like we did over here is maybe try to retrieve the value if it is there fine if it is not there that it Miss it has expired then we make a request or DB fish the current data put indication then return to the user pretty straightforward that's just high level more or less how we can D lot more of course it's more sophisticated way you can use this but in the end the main aspect of working with reddish of course would always be to set and get that's really the main um functions you would mostly also be using so let's continue that is of course um like we said the file based I'm just going to call this file based like this very straightforward and again this is just what it sounds like so more or less we are caching and storing our data our cach data on the file system you know so this this of course there are scenarios where this can be really useful if we are dealing with like let's say large amounts of data you know and we need to Poss let's say our cach data across application restarts for example as you can already imagine we we can store this more or less within the file system that's on which our application is running and then we can this will always be accessible to the application even at rest this will be persisted within the file system for our server and again this is really really um important when you have like really really large amounts of data for example this is can be Pro this can prove quite useful and here the point would be of course that we have um we resore our data in a file and then we should be able to retrieve this model list and that's that will be so what I can actually do is maybe to I don't know just give you some high level overview as to how we can do this so for this I'm probably just going to separate the logic so I can call this set value for example like this and so and it will expect some key value and this of course will be string and then maybe also need some expiry for example and this will be of type time do duration and in the end we should be able to return an error should be able to return an error if if if there is if there is one actually and then again we can copy this one again put it down here and then this will be our get value it's we still going to this would now of course need only the key because we not need the value anymore and then to set this so there are a couple of ways you can already imagine you could do this um but be one way I can think of for example would be um let's assume we have a directory called cache let's call this cash deer so let's assume we have a director called cache for example within our file system and now what we can actually do is um um maybe try to set this in the first place if this is not there already so we can do something like OS make deer all like this and then we can pass our cash de and then we provide some um file permissions more less as you can see over here so this will be our permissions and then we can maybe handle this because we get an error back and we say if this error error is not equal to new for example we return error like this so after this point we've created our file if it is not there in the first place and now we can create our cache file modess so I can call this cash cash file again this video I don't want it to be quite long so I need to Sprint F this way so I can do some string for marting and I like to provide a cach there and a key to I I like to use this to define the file more or less so I need a string here and of course maybe slash and then another string and in here I would have course provide my um what can I do so I can provide my cash there and of course ke so this key would be what's provided over here because again we said if we have like large amounts of data would probably just get it all out let's say you want to fetch like last data let say from a Time database for the last I don't know and then we get this huge amount of data we can just just this particular query we can just write it to this file and that's that should be fine and now we set our expiry time so this should we can use something like this [Music] time do now and why is this [Music] complaining um so of course time like this because we already have one name asire here and I can do expir do time. now and maybe I now add um what was provided like this expiry and then maybe I convert this to Unix like this so with this would of course give give us a 64 in uni Tim stamp and so we have everything we need and then what we can actually do is now maybe convert this to bytes so I can now have my data this way and then I create a slice B for example again there are a couple of ways you could actually do this if you wanted just showing you how this could be done and just for you to also understand the concept that is in this case is really about utilizing um file to store like huge amounts of data we might have you know and now I can provide um this this way and maybe of course I don't need nothing this is fine and then here maybe I provide my um maybe I provide my expiry time and of course value like this and now I simply just write so I can use my IU uh yeah I can do this in a y line so I um I think this is deprecated I'm not sure it's going to tell me um write file and then I provide my cach cach file and of course data and then I add some permission so I'm just going to use 0644 and maybe I get rid of this one is everything okay so what is it problem here um for my D has a WR type string so expired time is in of course and cash file is string oh okay cash but I don't have cash file in here um so expir time I 64 and value is string so I can change this one to string and yeah should be fine and now like yeah like I imagined I think this is expired um I think it should give was some blah blah blah so yeah I should can use OS right file so I can simply change this to. right file that should still be fine so this is one way we can set our crazy long um value here and then maybe to get this again we do something pretty similar I don't think this should be so complex again we need just the key so again I need the cache file and um I would need to part M um okay I would need to get this of course from our we already have a folder where we are storing this so we can actually use this to look into this so I will look into my cache like this and of course now I would use my key because if you remember we use the key to more or less give the file name so I can provide my key this way and now I would have my cache file and now now I would again use my I think I can use os. read file yes I don't have to go using I and then we see what we get but so we get our slice of bytes and um error so I call this data and error again we handle our error like this um so I'm tired of typing actually where can I copy where can I copy oh I have to type it it's fine so here I can say if this error is not equal to new we return this ER and we have handled our arrow and now we have our our data and then maybe I can convert this to Strings first of all I can call this parts and data and I have this as string as you can see over here and the next thing I would like to do now is to maybe try to look to see if the the time has expired and I can of course use time do par int no pass int um is that correct um no yes that I of course I have time so time do pars um layout value H so what I can actually do is to of course use the shrink com package and then they should be able of course to do the the same thing for us um but maybe what I would want to do first more or less would be um to try to get um to to verify more or less the expiration time of our stored value yeah and maybe what I can do is to just maybe do some really some really lazy implementation and I will leave you to of course do something much much cleaner if you would want to do this of course you take this approach but the point is that you understand the concept so I can do um Str Str com parse in and then I provide the string which would be from parts and of course um over here if we assume more or less um that unit time stamp that would be um this of course is it um should be more or less 1 characters in length again I'm leaving this for you to do a much much cleaner job so if that's the case that's what I would like to extract from here um because this is going to tell me some expiration time more so again the base is 10 and then the bit size would be 64 and then this should give me the expiry time expiry time and maybe some error again I handle the error like this so if there is an error again return this and now we have um the the expiration time more or less again like we did before we can also handle this by doing something like this some like time do now for example do units we convert this to Unix and we say if this is maybe greater come on Unix and we say if this is greater than maybe our expiration time then we know maybe this has expired and then we return maybe errors. new some like this and we tell the user I don't know um the value has expired something like this you you get the point and if everything of course is goes as we expected so what we can actually do would be to Simply return we return this this back to the user and here I can actually maybe of course to accommodate what we want so this going to be a string and an error so in this case I'm just going to put an empty string here and then some error and O my bad I can copy this my bad sorry about that I wanted to have this here actually so now I can PR return ENT string here just accommodates the new format that we want to provide and then we do some here and then here we can return this and new like this and then of course you can also maybe trate this data even further to um more or less accommodate um the changes we've made as regards to having this in this format um but yeah that's really the point so we get to set the value and then we get of course get the value and then we can of course use them here I will leave you to do this this should not be so hard more or less um because like I said I don't want the video to be quite long and then the last thing that we would look look at is CDN so CDN of course is a is quite a robust way of caching data um so it actually involves um or gives you the permission also more or less install like to store this static assets like images csss files JavaScript files more or less whatever and you get to you get the opportunity to store this on the global on the distrib network of servers that is globally available you know so this really really significantly improves improves the delivery of your assess to your users on different places wherever they might be in the world and of course working with CDN um you also even with CDN there a lot of different um caching strategies you can get um um strategy that is of course based on the location of the user so you get to um cash um resources to a given user based on their location there a lot of more there are actually a lot more complex um ways you can actually because you get to actually play around with the catch and casing strategies you get to for example with AWS actually I think also with Asia you have the option to actually like make like really really complex strategies and this is a much more um efficient way if you ask me because again this is um available on the global Network so you could um can sign significantly really reduce latency for examp example you get to serve your customers different places around the world wherever they might be and um you don't get that latency more or less so this is one cool couple of the ways of course some of the um strategies um that's are pretty much available that we could use to of course improve performance reduce latency um be able to utilize the resources we have of course you also helps us on the topic of scalability and such and that way our users don't have to wait 20 minutes each time they want to fetch data from our server but to C of course because I mean if you're already using a local browser from your local PC most websites that you already visit if you if you should inspect your page you would see that most of them if not all are already using your local the small memory you have on your browser to store file and then read this um um much faster um also in the form of cash so that's certain data they don't have to make a back request um to the server to fetch it but you just simply positionist this on your local on the local storage more or less on your local PC or or your local cash or whatever and then it's much easier to save you this content again the point is of course that it needs to be pretty pretty faster than you would um as against fetching the data from the database and that's really the point that's really the point of working with cash and anyways I hope I have more or less shared some insights with you with some of these examples I've shown you um again like I said these are more or less boiler plates but of course feel free to really really look into this dive deeper and then have a much deeper understand as to this how this works the point is for me to really really show you to make you understand the concepts it's really not about using some Library out there calling some API and then you're done you really really need to understand what you're doing so that's why the concept is quite important for us in this tutorial so now I would like to talk to you about login um we can also come back here to look at what we said would do and then for login um it's basically what it is um like I told you in the beginning you would need to have some form of advanced um and much more robust ways of monitoring like crucial aspects of application you know to have like valuable insights into the behavior and performance of your application of course effective logging and monitoring strategies like not only a the bugging and troubleshooting but also of course you can already imagine this enable maintenance and optimization and so what we can do is more or less look at some possible ways you could lock this list is not going to be exhaustive but it's more or less to give you insights or give you examples on what are the possible solutions that are out there so I would like to talk to you about a couple of them and so we can look at some of the post the the the available resources in this regard that we can actually use to facilitate the login so over here I can have maybe I can call this structured structured login with we're going to look at zap the zap library and this is of course I think this is provided by Uber um we can look at app um app Matrix for example and maybe with Prometheus um you've never heard of promethus I'm just going to give you a short quite short introduction more or less um we look at some distributed um some distributed tracing I don't know if you've had of Jer um we can look at this as well and um we can also maybe um talk a little bit about log aggregation log aggregation and for this there are a couple of options so we have of course um the elk stack I'm just going to put here elk stack so elk in this case of course stands for elastic SE lock stash and keyan um this is really really industry standard stuff right here but I'll just give you a quick insight into this how this works and then of course that's of course the concept of um a Latin and notification so this this all notification this can be achieved maybe using there are a couple of ways but one option might be to use um prome Meuse aler manager so these are some of the few things I would want to talk to you about here um how you can of course um use this to Monitor and log your application and so let's really Jump Right In that's really no point to wor of time out here and I'm just going to maybe probably go to our main file which should be over here if I can find it oh finally I found it and over here like I said we'll look at zap so this is an offering from um Uber so go to go go. Uber um of course.org and then we go to zap so this um is where we can find this more or less and then to use this in our application it's quite simple I can create a config this way and I can go to zap think it's called new [Music] Pro new production config like this yes and yeah this will provide us um some config um maybe what I can do more or less now is to install this so we can also get tence so go mode go mod tidy and then they should install this for us and we are good to go so we have this so according to um sap of course um the whole point is that this offers structured um login more or less but you still also have the option you can actually use like the print kind of like style of login and the points like the easiest way as you can see over here to instantiate a loger would always be to use this methods start with new so it can be for example zap do um come on so we can have new um example example and then we can maybe use a Su good um um kind of login because um this this Su good actually is supposed to be like when performance is like the key thing very very important for you this offers like is supposed to be like reasonably I think up to 40 times faster according to documentation or so um but anyways um like the simp like I was saying the simplest ways to instan shate is as the new example and we can use the new developments this way and of course like we already did here it's in the new production and to log more or less is also pretty straightforward so we can um maybe I can actually just name this I actually just name this logger and this is actually supposed to give me give me a [Music] config and maybe of course um I'm just going to use the production I'm just going to forget about config for now and then this should give me also two things so a logger and an error and I can handle the error of course um so we can say if this error is not equal to n maybe here we can actually do like a log. f something like this and but when that's not the case of course we have our logger already and we can um of course we would need to of course defer a snc so I can say defer logo. sync like this and we are Goods to go so down here we can already go ahead and use our logger um pretty straightforward so we can actually do something like like the way would use regular um loggers more or less so we can even do things like pretty simple things like say loger doino um come on um what [Music] happened so the loggers are more or less actually um buffered so it's also good practice to always defer the thing this way so that um we can actually let the the the logger exit gracefully and that's the point and so what what I wanted to show you of course with this package you have a lot of options as it pertains to um structured login or to give one example let's use like the new example for example like this and this one should of course just give us a logger I'm just going to remove this part and then we have our logger like this and we of course do defer and then we can actually use it already so we can do logo. info and then provide our message will be some message and then we can of course provide more information so I can even do something like um um logo do common um sorry should be zap. string and then of course I provide a key and a value so this is one way I can do some um some additional information here I can say error for example and then I can say um provide the error here and of course apart from string I can also do um let's say zap do um in like this and then I can add more information I can say maybe trials whatever and then I can say the number of Trials it has to be an in of course and then also lots more different options so we can also do Z the duration and stuff like that and we can of course easily go from a sugar logger to more or less a dis sugar like a plain logger and it's pretty pretty straightforward or we have to do is maybe to Sugar this logger we simply do something like this logger sugar and then that's already fine and then to dogar it again complete opposite and now say sugar do the sugar like this PR right forward and then this will give us a plain logger and this will give us a sugar logger um there's a lot more um we can actually do with this but the point is that with this you also get structured login and then you can also you also have the option to like instantiate a package level logger and then have this utilize all to um your application so that's more or less what I wanted to show you in here I'm just going to get rid of this is not really important anyways and so that's one way we can actually introduce login into our application pretty straightforward um the next thing of course we would want to talk a little bit about would be um promus um so I I'm also guessing maybe some people are already familiar working with promethus but with promethus also um like a really popular open source monitory and alting solution so it allows you more L to collect and store time series data so you the way you could of course imagine working with like a Time series database for storing like time series data um with promethus this in this case this would more or less be like some logs that you can of course might have generated from your application so and it also provides like a really quite intuitive and really powerful query language and of course a visualization too so you can of course do things like metrics you can monitor let's say your server um if you depending of course what you what you make available to prometh use things like let's say on the server end let's say things like um the load on your server the amount of memory used and stuff like that two things of course pent to application in general and there is of course a provided package um sorry client library in go and then all you have to do of course is also maybe connect to Prometheus and then register your client and then you start to handle more or less your your metrics and then you would have this of course piped to to promethus and then witha is also like an open source distributed um tracing system so it allows monitoring and shoting so in in much much um robust way so you can also handle like compressed microservice based architectures you know it's really really cool when it comes to like tracing like for if you have like a complex setup where you have a lot of M architect Microsoft micros Services of course each communicates with one another um Yer could really prove useful here again it's open source so it's also means that it's free you would of course only need to run this in your own server if you run this on the cloud then you would be charged for the computer cost not the um solution itself so again it provides like a really really comprehensive view of request flows across multiple services so it also makes a lot easier to identify like performance botton X and of course root causes of your problems it's I I would leave the link um because we can't of course explore all this examples in this tutorial because it's going to be really long because this topics are themselves or should be different tutorial topics themselves more or less if you ask me um anyways the import the next of course would be elk um if you're again like this one even every simple attribute or every simple of um the different resources that make up the X stack should also they themselves be like different separate tutorial topics um where you have like a Lo elastic search lock stash and of course kibana because again they are like they are themselves like really really complex tools that's handle of course production workloads so like it's a really really powerful combination of like I said different open source tools um for log aggregation analysis and visualization so visualization mostly happens with kibana and even kibana itself also provides a query language called the Kik kibana query language see that also makes it a lot easier to query your data to also create a lot for example you can actually even pipe this alerts down to let's say slack or emails or whatever so like this like the whole the whole She Bang actually all bottled up in this if you ask me it's again a complete should be a complete tutorial on its own and then of course we have alerting and notification so most of alerting also like I said can also already be done with ke but in the end in the end they offer like they try to solve different the same problem but of course using like quite unique approaches and so that will be all of course um if you would want to know more of either of these topics um I would of course be happy to share shed more lights into this so we can so I can maybe of course help you to understand this much better again I'm going to provide a link to all of this and then we hopefully this should be able to give you all the information you need and you can of course read up and then come back to me if you have questions and stuff like that um anyway guys that will be all for this tutorial I hope it was um useful for you we actually coming to the end we have just two more things to talk about and then that which hopefully would wrap up this topic and then we'll talk about other interesting topics as well as it pertains to not just go the um the programming language but of course like the whole not just um go but maybe also about rout the whole concept about software development different applications I um whatever the case may be of course um um as I might might have maybe come across it in my journey so far um anyway guys that will be all for now and until next time of course have a lovely evening and bye-bye [Music] oh
Info
Channel: Easy Dev For All
Views: 43
Rating: undefined out of 5
Keywords:
Id: Y-Lnrlw8tkM
Channel Id: undefined
Length: 51min 31sec (3091 seconds)
Published: Tue Jul 02 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.